我需要在rails 4中提供一些ip地址来设置某些路由的约束。 有没有办法从配置文件中获取这些数据而不将其编码到路径文件中?
我正在为app变量使用yaml文件和初始化程序,例如:
APP_CONFIG = YAML.load_file("#{Rails.root}/config/application.yml")[Rails.env]
通常我可以这样做:
constraints(:ip => %w[APP_CONFIG['app_url']]) do
.. my routes..
end
这在routes.rb中是否有办法解决这个问题?
答案 0 :(得分:0)
查看rails(http://guides.rubyonrails.org/initialization.html)的初始化过程。你会发现路由实际上很早就加载了(早于application.rb或其他初始化器)。因此它尚未加载此文件。
这样做可以将它放入你的boot.rb:
# Set up gems listed in the Gemfile.
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
#Now load app config:
require 'yaml'
APP_CONFIG = YAML.load_file(File.expand_path('../../config/application.yml', __FILE__))
答案 1 :(得分:0)
我相信您遇到了加载订单问题。你可能会破解这个,但是......
我强烈建议使用费加罗来解决这个问题。它是专门为rails配置而设计的gem,可以很好地与12因子应用程序部署(如Heroku)配合使用:https://github.com/laserlemon/figaro
我在我正在使用的应用程序中使用Figaro,并且能够确认访问我的路径文件中的env变量。我相信这个宝石将解决您目前的问题以及您甚至不知道您还有的其他配置问题!