【问题标题】:Where to put environment variables on the server?服务器上的环境变量放在哪里?
【发布时间】:2015-04-18 06:40:27
【问题描述】:

我在生产服务器上有一个 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'] 的最佳位置是什么?

我不想使用任何 gem 或 Capistrano。

【问题讨论】:

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


【解决方案1】:

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

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

  1. 为每个项目创建一个环境变量文件(比如"$PROJECT_DIR/.env"
  2. 添加到.gitignore
  3. 在应用服务器启动之前执行它,类似于

    source "$PROJECT_DIR/.env" && rails server
    

但这就是 dotenv 的创建目的,那么为什么要重新发明轮子呢?

【讨论】:

    【解决方案2】:

    /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)
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-12
        • 2020-05-29
        • 1970-01-01
        • 2023-04-06
        • 2017-06-16
        • 1970-01-01
        相关资源
        最近更新 更多