在Mac上设置Ruby的ENV变量

6
我希望能够让我的开发机尽可能接近生产服务器(在这种情况下是Heroku)。
Heroku可以让您定义配置变量。
config:add key=val

现在,由于密钥值不存储在我的代码中,因此这很安全。

您知道我在本地mac机器上如何为每个应用程序创建这样的环境变量吗?

我已经搜索过了,但还没有找到一个好的解决方案。有什么想法吗?

提前感谢您。

4个回答

8
感谢Zabba,但我已经找到了一种适合我的好方法。
我正在使用POW运行我的本地应用程序,并且在阅读文档时发现可以通过在我的应用程序根目录中添加.powenv文件来设置环境变量。具体请参考POW文档
export API_KEY='abcdef123456'

您可以像平常一样在您的应用程序中使用它。
api_key = ENV['API_KEY']

很酷的东西。

好的,你没有提到你正在使用POW! - Zabba

3
这里提供一种方法:
访问http://railswizard.org/,并将"EnvYAML"添加到模板中。单击完成,然后单击生成的.rb文件。可以看到代码正在使用config/env.yml文件设置ENV变量。
以下是实现方法,感谢http://railswizard.org/
在应用程序目录中:
config/application.rb中添加内容:
require 'env_yaml'

创建一个名为lib/env_yaml.rb的文件:
require 'yaml'
begin
  env_yaml = YAML.load_file(File.dirname(__FILE__) + '/../config/env.yml')
  if env_hash = env_yaml[ENV['RACK_ENV'] || ENV['RAILS_ENV'] || 'development']
    env_hash.each_pair do |k,v|
      ENV[k] = v.to_s
    end
  end
rescue StandardError => e
end

创建一个名为config/env.yml的文件:
defaults: &defaults
  ENV_YAML: true
  some_key: value

development:
  <<: *defaults

test:
  <<: *defaults

production:
  <<: *defaults

请注意,ENV不是一个哈希表 - 之所以看起来像是因为使用了[]。这就是为什么在lib/env_yaml.rb中,一个each循环正在将config/env.yml中找到的每个值的值设置为ENV的值 - 因为我们不能直接将哈希表分配给ENV。

1
ENV变量背后的想法是,您可以将环境变量保持在代码之外,并且它们可以在应用程序内部神奇地为您提供。这个解决方案建议再次硬编码,从而使您的设置暴露给所有人。 - SpoBo

1

我没有使用pow,而是使用rvm和bash。我按照this Peachpit blog post的说明成功设置了环境变量。

和其他答案类似,我需要在我的~/.profile文件中添加像export TWILIO_ACCOUNT_SID="XXX"这样的命令。

然后,在我的代码中使用以下方式访问这些变量:

account_sid = ENV["TWILIO_ACCOUNT_SID"]

0
将你的环境变量放在一个名为.env的文件中,foreman会自动读取它们。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接