2

我有我所有的环境变量config/initializers/app_environment_variables.rb,这个设置到目前为止一直在工作,除了现在我需要使用和中的变量config/environments.rbconfig/environments/*.rb这似乎是之前执行的config/initializer/*.rb

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

  1. 配置/预初始化器.rb
  2. 配置/环境.rb
  3. 配置/环境/#{RAILS_ENV}.rb
  4. 插件初始化
  5. 宝石初始化
  6. 配置/初始化程序/*.rb
  7. ...

但该信息来自 2009 年,而我在Rails 3.1. 我希望在“初始化”或“配置”指南中看到此类信息,但要么我无法找到该信息,要么它不存在。

4

2 回答 2

3

我在一个新的“演示”应用程序( )中添加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)加载您的环境变量,那么请阅读接下来的内容。

于 2013-05-24T20:26:48.887 回答
2

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

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

.env.sample

AWS_ACCESS_ID=YOUR_ACCESSKEY_GOES_HERE
ETC_ETC=ETC ETC ETC

好处:

  • 您不会将敏感信息提交给源代码控制。
  • 它们确实将是环境变量,在任何代码运行之前设置。
于 2012-09-14T18:02:14.317 回答