我正在制作一个简单的RubyGem(无Rails),它使用Mail-gem从CLI发送电子邮件。为了配置邮件程序,我必须提供一个密码,我想将其秘密存储在ENV变量或其他东西中,使其不公开。
我试着使用Dotenv,但发现在安装了我新建的gem后,它只有在我从项目目录中运行时才能工作。如果我尝试从主目录运行gem,那么ENV变量将不再可访问。
在gemspec spec.files
中,我确保包含.env
文件。
我不认为我理解将变量加载到RubyGem中的实际过程。
Dotenv是一种用于将环境变量传送到不同执行环境(例如开发、阶段、生产等)的工具,它实际上并不适合在gem中使用。只有当您在项目目录中运行脚本时,这才有效,因为Dotenv就是这样设计的。
尝试使用ENV
全局变量(它只是从您的机器加载环境变量),并指示用户自行设置环境,而不是在gem中使用.env
文件。假设没有其他问题,应该允许从任何地方运行脚本。
正确的行为取决于调用时的当前工作目录,这表明这是一个相对路径问题。由于它至少在某些时候起作用,因此gemspec
设置必须正确。
我自己还没有使用过Dotenv
,但查看源代码表明,通过Dotenv.load
为env
文件提供一个明确的路径是前进的方向。
尝试使用bin/myapp
中的Dotenv.load(File.expand_path("../.env", __FILE__))
,或者根据您的目录结构进行调整(假设env
文件位于Gem根目录中)。
本教程中讨论了类似的方法。