我想预加载配置(来自“.yml”文件)。在我的一个初始化文件(config / initializers / facebook.rb)中,我有以下代码行:
FACEBOOK_CONFIG = YAML.load_file("#{Rails.root}/config/facebook.yml")[Rails.env]
因此,它在“开发”模式中就像一个魅力。一旦我切换到生产模式,它一直告诉我,FACEBOOK_CONFIG是我的“facebook.js.coffee.erb
”文件的未初始化常量,位于 assets / javascript (如果重要),如果我想要“耙资产:预编译”。我尝试过随机的东西,比如:RAILS_ENV=production bundle exec rake assets:precompile
或
rake assets:precompile:all
,但没有运气
我尝试为我的生产环境分配“initialize_on_precompile = true
”变量(但默认情况下应该是真的),以防万一。
为什么它在生产模式下不起作用(但是,我想强调一点,它在开发环境中工作(!))。
有人可以帮助那个吗?
答案 0 :(得分:4)
我遇到了完全相同的问题。这是因为您的javascript(coffescript)文件引用了初始化程序中定义的常量。因为它是在初始化程序之前预编译的,所以应用程序会抛出错误。
这是我找到的简单解决方案。您将此代码放在config:
中application.rb文件的底部module AssetsInitializers
class Railtie < Rails::Railtie
initializer "assets_initializers.initialize_rails",
:group => :assets do |app|
require "#{Rails.root}/config/initializers/facebook.rb"
end
end
end
它手动加载初始化文件夹中的某些文件。它解决了我的问题。
希望这也是你的问题。
答案 1 :(得分:0)
module Rails
class << self
def facebook_config
@@facebook_config ||= nil
end
def facebook_config=(facebook_config)
@@facebook_config = facebook_config
end
end
end
Rails.facebook_config = YAML.load_file("#{Rails.root}/config/facebook.yml")[Rails.env]
# And you can use it like this in anywhere:
puts Rails.facebook_config