在ruby gem

时间:2016-08-04 12:59:07

标签: ruby rubygems environment-variables env

我制作了一个简单的RubyGem(没有Rails),它使用Mail gem从CLI发送电子邮件。为了配置邮件程序,我必须提供一个密码,我想秘密地存储在一个ENV变量或其他东西,以便它不公开。

我尝试使用Dotenv,但发现在安装我新建的gem后,它只能在我从项目目录运行它时才有效。如果我尝试从我的主目录运行gem,则不再可以访问ENV变量。

在gemspec spec.files中,我确保包含.env文件。

我不认为我理解将变量加载到RubyGem的实际过程。

2 个答案:

答案 0 :(得分:1)

Dotenv是一种用于将环境变量传送到不同执行环境(例如开发,登台,生产等)的工具,并且它并不真正用于gem中。这只适用于在项目目录中运行脚本的原因是因为这就是Dotenv的设计工作方式。

尝试使用alarm.list.cars全局变量(只是从您的计算机加载环境变量),并指示您的用户自己设置环境,而不是在其中设置ENV文件宝石。 应该允许从任何地方运行脚本,假设没有其他问题。

答案 1 :(得分:0)

正确行为取决于调用时当前工作目录的事实表明这是一个相对路径问题。由于它至少在某些时候有效,因此gemspec设置必须正确。

我自己没有使用Dotenv,但查看来源表明,通过env提供Dotenv.load文件的明确路径是前进之路。

尝试使用Dotenv.load(File.expand_path("../.env", __FILE__))中的bin/myapp,或者适应您的目录结构(假设env文件位于Gem root中。)

this tutorial中讨论了类似的方法。