如何定义ENV变量?

时间:2012-09-27 19:26:35

标签: ruby ruby-on-rails-3 environment-variables

我的生产和开发环境都有以下配置。

config.action_mailer.smtp_settings = {
  :address   => "smtp.mandrillapp.com",
  :port      => 587,
  :user_name => ENV["MANDRILL_USERNAME"],
  :password  => ENV["MANDRILL_PASSWORD"]
}

我用谷歌搜索了一段时间,但我找不到让我理解的答案。如何为我的rails项目的开发和生产设置ENV变量?

2 个答案:

答案 0 :(得分:2)

对于开发,您将需要使用在版本控制中忽略的配置文件。它可能是YAML,JSON,ruby,bash ......这是一个微不足道的选择。然后,您将使用初始化程序文件来确保在应用程序启动时加载这些变量。对于生产,您可以将配置文件(甚至可能有不同的设置)复制到正确的位置作为部署过程的一部分;或者如果您使用的是heroku,则可以使用heroku config:add YADA=yada从命令行设置这些。

以下是来自YAML文件的设置的基本示例:

# config/settings.yml
development:
 MANDRILL_USERNAME=secret_username
 MANDRILL_PASSWORD=secret_password
 ANOTHER_SECRET_SETTING=the_list_goes_on_and_on
production:
 MANDRILL_USERNAME=different_username
 MANDRILL_PASSWORD=another_password
 ANOTHER_SECRET_SETTING=get_the_idea?

# .gitigore
# ...
config/settings.yml

# config/initializers/environment_settings.rb
environment_settings = YAML.load_file('./config/settings.yml')[Rails.env]
environment_settings.each do |key, value|
  ENV[key] ||= value
end

答案 1 :(得分:1)

他们的环境变量;你没有把它们用于开发和生产。

您可以通过多种方式设置应用程序配置变量,也可以在运行之前在shell中设置它们,也可以使用特定于环境的名称,或者......