在哪里设置环境变量,以便可以从`config / initializer / * .rb`中读取它们?

时间:2012-09-14 16:38:23

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

我在config/initializers/app_environment_variables.rb中拥有所有环境变量,此设置目前已经有效,除非现在我需要使用config/environments.rbconfig/environments/*.rb中的变量,这些变量似乎已执行在config/initializer/*.rb之前。

我发现this页面显示“配置顺序”如下,

  1. 配置/ preinitializer.rb
  2. 到config / environment.rb
  3. 配置/环境/#{RAILS_ENV} .RB
  4. 插件初始化
  5. 宝石初始化
  6. 配置/初始化/ *。RB
  7. ...
  8. 但该信息来自2009年,而我在Rails 3.1。我希望在“initialization”或“configuring”指南中看到此类信息,但要么我无法找到信息,要么就不存在。

2 个答案:

答案 0 :(得分:2)

我建议使用foreman.env文件来设置环境变量。

  1. 创建一个进入源代码管理的.env.sample文件
  2. 创建您自己的.env文件,并将.env添加到.gitignore
  3. 使用foreman start而不是rails s
  4. 享受真棒(默认为5000端口)。
  5. <强> .env.sample

    AWS_ACCESS_ID=YOUR_ACCESSKEY_GOES_HERE
    ETC_ETC=ETC ETC ETC
    

    优点:

    • 您不会将敏感信息提交给源代码管理。
    • 它们确实是环境变量,在任何代码运行之前设置。

答案 1 :(得分:1)

我在新的“演示”应用(puts "--- #{__FILE__}")中将rails new demo添加到以下每个文件的顶部:

config.ru
config/application.rb
config/boot.rb
config/environment.rb
config/environments/development.rb
config/initializers/hello.rb

然后我只使用rails server启动应用,并获得以下输出(....以表示简洁性):

--- /Volumes/..../initialization-order/demo/config/boot.rb
--- /Volumes/..../initialization-order/demo/config/application.rb
=> Booting WEBrick
=> Rails 3.2.13 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
--- /Volumes/..../initialization-order/demo/config.ru
--- /Volumes/..../initialization-order/demo/config/environment.rb
--- /Volumes/..../initialization-order/demo/config/environments/development.rb
--- /Volumes/..../initialization-order/demo/config/initializers/hello.rb
[2013-05-16 15:05:59] INFO  WEBrick 1.3.1
[2013-05-16 15:05:59] INFO  ruby 1.9.3 (2013-02-22) [x86_64-darwin12.3.0]
[2013-05-16 15:05:59] INFO  WEBrick::HTTPServer#start: pid=91029 port=3000
^C[2013-05-16 15:06:25] INFO  going to shutdown ...
[2013-05-16 15:06:25] INFO  WEBrick::HTTPServer#start done.
Exiting

因此初始化顺序如下:

/config/boot.rb
/config/application.rb
/config.ru
/config/environment.rb
/config/environments/development.rb
/config/initializers/hello.rb

因此,如果您希望在config/environments/*.rb之前(以及/config/initializers/*.rb之前)加载环境变量,那么read this next