ruby-on-rails - 如何在 Rails 中拥有不同的环境变量值?

标签 ruby-on-rails ruby ruby-on-rails-3

这就是我运行rails console命令的方式:

COMPANY=b2b RAILS_ENV=development DEPLOY_ENV=localhost rails console

相反,我想通过在内部设置这些变量来仅运行 rails console 命令。我该怎么做?

我看到了一些答案并制作了 config/company.yml 文件:

development:
  COMPANY: b2b
  DEPLOY_ENV: localhost

production:
  COMPANY: b2c
  DEPLOY_ENV: xyz.com

我编写了以下config/initializers/company.rb文件:

COMPANY_CONFIG = YAML.load_file("#{::Rails.root}/config/company.yml")[::Rails.env]

如何在某些帮助器/ Controller 中访问这些变量?我不明白该怎么做? 仅运行 rails consolerails server 而不传递上面显示的额外环境变量后,如何设置这些 ENV 变量?

最佳答案

您无法在 yaml 文件中设置环境变量,这是不同的事情。使用dotenv gem 用于管理环境变量。

先阅读Environment Variables

但是有肮脏的黑客。您可以在 Rails 加载时创建 ENV 变量

将此代码添加到 before_configurationconfig/application.rb :

config.before_configuration do
  env_file = File.join(Rails.root, 'config', 'company.yml') # Find yml file
  YAML.load(File.open(env_file)).each do |key, value|       # Open file
    ENV[key.to_s] = value                                   # Set value to ENV
  end if File.exists?(env_file)                             # If file exists
end

现在您可以从应用程序中任何位置的 yml 文件访问环境变量。

我没有测试这个,但我认为这个有效。 这项工作。

Some info

关于ruby-on-rails - 如何在 Rails 中拥有不同的环境变量值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24557850/

相关文章:

ruby-on-rails-3 - Rails 3 +carrierwave + nginx = 权限被拒绝

ruby - 导轨 : How to log an object that might be nil?

ruby-on-rails - 无法在 rails 2.3.5 中加载 rspec 生成器

ruby-on-rails - 如何直接下载 pdf 文件而不是使用 carrierwave in rails 将其重定向到新页面

javascript - ArticlesController#show 中的 ActiveRecord::RecordNotFound

ruby - 在 Ruby 中,可以将文件和行号放入 Logger.formatter 中吗?

ruby - 在 Ruby 中提取部分字符串

ruby-on-rails - Carrierwave 文件名在 update_attributes 上不断变化

ruby-on-rails - 似乎无法保持 redis 计数器正确

ruby-on-rails - 如何通过ActiveRecord从多个线程写入SQLite3?