在服务器上放置环境变量的位置?

时间:2015-02-17 14:29:11

标签: ruby-on-rails ruby linux ruby-on-rails-3

我在生产服务器上有一个Rails应用程序和一个.rb文件,我这样做:

Rails.configuration.my_sect = if Rails.env.development? || Rails.env.test?
  {
    secret_key: 'some_secrete',
    public_key: 'some_public'
  }
else
  {
    secret_key: ENV['key1'],
    public_key: ENV['key2']
  }
end

该应用程序位于Linux服务器上。将secret_keypublic_key的值放在服务器上的最佳位置是什么,以便始终可以访问ENV['key1']ENV['key2']

我不想使用任何宝石或Capistrano。

3 个答案:

答案 0 :(得分:1)

我会将它们放在服务器脚本中,因为例如,~/.bashrc之类的shell配置文件未加载到cron脚本或其他方案中。

"服务器脚本"可以像key1=foo key2=baz rails s一样简单。

答案 1 :(得分:0)

/config/en_vars.rb添加到.gitignore

创建文件config/en_vars.rb并将变量放在那里:

ENV['key1']='foo'
ENV['key2']='bar'

然后在config/environment.rb中添加require行下面的行:

en_vars = File.join(Rails.root, 'config/en_vars.rb')
load(en_vars) if File.exists?(en_vars)

答案 2 :(得分:0)

即使您说您不想使用任何宝石,我建议您使用dotenv;即使不建议在生产环境中使用它。

否则,最简单的 plain 解决方案是:

  1. 创建每个项目的环境变量文件(让我们说"$PROJECT_DIR/.env"
  2. 将其添加到.gitignore
  3. 在应用程序服务器启动之前执行它,类似于

    source "$PROJECT_DIR/.env" && rails server
    
  4. 但那是dotenv的创造,为什么要重新发明轮子?