5

我想預加載配置(來自「.yml」文件)。在我的初始化文件(配置/初始化/ facebook.rb)我有代碼以下行:Rails預編譯常量未初始化

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

所以,它的工作原理就像在「發展」模式的魅力。一旦我切換到生產模式,它會一直告訴我,FACEBOOK_CONFIG對於我的「facebook.js.coffee.erb」文件是一個未初始化的常量,位於資產/ javascript(如果有要求),如果我想要「耙資產:預編譯」 。我試着做隨機的東西,如:RAILS_ENV=production bundle exec rake assets:precompile

耙資產:預編譯:所有

,但沒有運氣

我曾嘗試爲分配我的生產環境「」變量(儘管默認情況下應該是這樣),以防萬一。

爲什麼它不能在生產模式下工作(但是,我想強調一下,它在開發環境中工作(!))。

有人可以幫助那個嗎?

+0

你的yml文件是什麼樣子的(當然減去你的憑證),你是在生產模式下在本地啓動還是在像heroku這樣的服務上失敗? – 2013-12-06 01:16:13

+0

你可以試着在初始化文件中引發一個異常,看看它是否被觸發?另一個要嘗試的是,在初始化文件上引發一個異常,並運行一個不同的Rake任務,該任務也會加載Rails環境。嘗試開發和生產環境(RAILS_ENV =生產) – htanata 2013-12-06 01:47:47

回答

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 
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 

它手動從初始化文件加載了某些文件。它解決了我的問題。

希望這也是你的問題。

+0

不確定OP是否仍在監視此問題 - 但如果這不能解決問題,我實際上會感到驚訝。我只是在這張嘴上發了50分。 – Laurent 2013-12-13 00:32:16

相關問題