5

我想预加载配置(来自“.yml”文件)。在我的一个初始化程序文件(config/initializers/facebook.rb)中,我有以下代码行:

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

所以,它在“开发”模式下就像一个魅力。一旦我切换到生产模式,它就会一直告诉我,如果我想“rake assets:precompile” ,FACEBOOK_CONFIG 是我的“ facebook.js.coffee.erb”文件的未初始化常量,位于assets/javascript (如果重要的话)。我试过做一些随机的事情,比如:RAILS_ENV=production bundle exec rake assets:precompile

耙资产:预编译:全部

,但没有运气

我已经尝试为我的生产环境分配“ initialize_on_precompile = true”变量(尽管默认情况下它应该是真的),以防万一。

为什么它在生产模式下不起作用(但是,我想强调的是,它在开发环境中确实起作用(!))。

有人可以帮忙吗?

4

2 回答 2

4

我遇到了完全相同的问题。这是因为您的 javascript(coffescript) 文件引用了在初始化程序中定义的常量。因为它是在初始化程序之前预编译的,所以应用程序会抛出错误。

这是我找到的简单解决方案。将此代码放在配置中 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

它从初始化文件夹手动加载某些文件。它解决了我的问题。

希望这也是您的问题。

于 2013-12-06T06:34:38.697 回答
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
于 2013-12-06T01:18:00.127 回答