Rails 3 /设置自定义环境变量

时间:2011-01-25 23:31:01

标签: ruby-on-rails-3

我正在尝试创建一个rails应用程序,它在环境是开发环境时为变量分配一个值,在环境是生产环境时为该变量分配另一个值。我想在我的代码中指定两个值(硬连线),并让rails知道根据运行的环境分配给变量的值。我该怎么做?

如果它很重要,我稍后访问该变量并在模型的类方法中返回其值。

4 个答案:

答案 0 :(得分:25)

您可以使用初始化程序执行此操作。

# config/initializers/configuration.rb
class Configuration
  class << self
    attr_accessor :json_url
  end
end

# config/environments/development.rb
#  Put this inside the ______::Application.configure do block
config.after_initialize do
  Configuration.json_url = 'http://test.domain.com'
end

# config/environments/production.rb
#  Put this inside the ______::Application.configure do block
config.after_initialize do
  Configuration.json_url = 'http://www.domain.com'
end

然后在您的应用程序中,调用变量Configuration.json_url

# app/controller/listings_controller.rb
def grab_json
  json_path = "#{Configuration.json_url}/path/to/json"
end

当您在开发模式下运行时,会点击http://test.domain.com网址。

当您在生产模式下运行时,会点击http://www.domain.com网址。

答案 1 :(得分:15)

我喜欢在YAML中存储设置。要根据环境进行不同的设置,使用默认设置,您可以拥有一个初始化文件(例如config/initializers/application_config.rb),如下所示:

APP_CONFIG = YAML.load_file("#{Rails.root}/config/application_config.yml")[Rails.env]

...然后在config/application_config.yml

defaults: &defaults
    my_setting: "foobar"

development:
    # add stuff here to override defaults.
    <<: *defaults

test:
    <<: *defaults

production:
    # add stuff here to override defaults.
    <<: *defaults

...然后,使用APP_CONFIG[:my_setting]

取出设置

答案 2 :(得分:3)

我在Rails 3.2中使用Yettings gem,它允许我将我的应用程序变量存储在config/yettings.yml中,如下所示:

defaults: &defaults
  api_key: asdf12345lkj
  some_number: 999
  an_erb_yetting: <%= "erb stuff works" %>
  some_array:
    - element1
    - element2

development:
  <<: *defaults
  api_key: api key for dev

test:
  <<: *defaults

production:
  <<: *defaults

然后像这样访问它们:

#/your_rails_app/config/yetting.yml in production
Yetting.some_number #=> 999
Yetting.api_key #=> "asdf12345lkj"

答案 3 :(得分:-2)

你可以找到这样的环境:

ruby-1.9.2-p0 > Rails.env
  => "development"

将值存储在config/application.rb中的全局变量中,例如:

$foo = "something"

您还可以在config/environments/文件中分配变量,而不是在Rails.env中根据application.rb来决定。取决于你的情况。