5

(「.yml」ファイルから)構成をプリロードしたかったのです。初期化ファイル (config/initializers/facebook.rb) の 1 つに、次のコード行があります。

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

だから、それは「開発」モードで魔法のように機能します。本番モードに切り替えると、FACEBOOK_CONFIG は " facebook.js.coffee.erb" ファイルの初期化されていない定数であり、assets/javascriptにある(問題がある場合)、"rake assets:precompile" を実行したい場合に表示され続けます。次のようなランダムなことを試してみました:RAILS_ENV=production bundle exec rake assets:precompileまたは

rake アセット:プリコンパイル:すべて

、しかし運がない

念のため、実稼働環境に" " 変数を割り当ててみinitialize_on_precompile = trueました (ただし、デフォルトでは true になっているはずです)。

本番モードで動作しない理由 (ただし、開発環境では動作することを強調したいと思います)。

誰かがそれを手伝ってくれますか?

4

2 に答える 2

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

初期化フォルダーから特定のファイルを手動でロードします。それは私の問題を解決しました。

うまくいけば、これはあなたにとっても問題でした。

于 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 に答える