如何在Rails中使用不同的envirenment变量值?

这是我运行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] 

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

你不能在yaml文件中设置环境变量这个区别的东西。 使用dotenv gem来管理环境变量。

首先阅读环境变量

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

将此代码添加到config/application.rb before_configuration

 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 

现在,您可以在app中的任何位置访问yml文件中的env变量。

我不测试这个,但我觉得这个工作。 这项工作。

一些信息

您可以在config/initializers/application.rb文件中创建这些设置变量:

 company_settings_path = Rails.root.join('config', 'company.yml') COMPANY_CONFIG = { development: { company: :default, deploy_env: :none_yet } } COMPANY_CONFIG = YAML::load(File.open(company_settings_path)) if File.exists?(company_settings_path) COMPANY_CONFIG = COMPANY_CONFIG.with_indifferent_access 

然后像这样访问它们:

 # controller def show if COMPANY_CONFIG[:company] == 'b2c' # your logic else # other logic end end 

您可以在我的应用程序(模型,控制器,视图,帮助程序)中的任何位置访问常量COMPANY_CONFIG ,方法与我在下面使用的方法相同。