Rails 3エンジンと静的資産
-
27-09-2019 - |
質問
私は宝石(gmaps4rails)としてバンドルしたエンジンを構築しています。 Railsアプリの /publicでエンジンの /公開をコピーしました。
開発ではすべてが正常に機能しますが、生産では機能しません。(エンジンとメインアプリの)静的資産が見つからないようです。
ログは次のことを示します(ただの要約):
Started GET "/javascripts/application.js?1286294679" for 127.0.0.1 at Wed Nov 24 00:22:20 +0100 2010
ActionController::RoutingError (No route matches "/javascripts/application.js"):
Rendered /Users/me/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/gems/1.8/gems/actionpack-3.0.3/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (1.1ms)
Started GET "/stylesheets/gmaps4rails.css?1290554221" for 127.0.0.1 at Wed Nov 24 00:22:20 +0100 2010
ActionController::RoutingError (No route matches "/stylesheets/gmaps4rails.css"):
私はいくつかのことをしました:
私のアプリのproduction.rbで、私は次のように設定します:
config.serve_static_assets = true
これは問題を解決しますが、十分にエレガントではありません。それを虚偽に保ち、エンジンに構成を追加したいと思います:)
私はアドバイスに従いました ここ 成功せずに。
解決
パフォーマンスの理由で、生産モードでは、サービングの静的資産が無効になります。 Webサーバーは、これらの資産を提供するように構成する必要があります。
これを見てください 討論 NginxをWebサーバーとして使用している場合。
他のヒント
Rails 3.xで、これをconfig/environments/production.rbで設定してみてください
config.serve_static_assets = true
デフォルトでは、RailsはAssets Server(Lightttp、nginx、またはApache)を使用していると想定しています
エンジンで、交換してください。
initializer "static assets" do |app|
app.middleware.use ::ActionDispatch::Static, "#{root}/public"
end
と:
initializer "static assets" do |app|
app.middleware.insert_before(::ActionDispatch::Static, ::ActionDispatch::Static, "#{root}/public")
end
これをRailsに追加してみましたか::エンジンクラス:
initializer "static assets" do |app|
app.middleware.use ::ActionDispatch::Static, "#{root}/public"
end
これは、実行時に宝石 /パブリックディレクトリとアプリとマージされます。
Rails 3.1エンジンに取り付けられた同様の問題がありました。私は舞台と生産で空白の資産を受け取っていました。
で解決策を見つけました http://jonswope.com/2010/07/25/rails-3-engines-plugins-and-tatic-assets/comment-page-1/#comment-87 Rails 3.1資産の場所に合わせて調整しました。
initializer "static assets" do |app|
app.middleware.insert_before ::Rack::Lock, ::ActionDispatch::Static, "#{root}/app/assets"
end
もっとエレガントな方法があると思いますが、今日の私の努力は実質的なものを生み出しませんでした。
私は方法についてあまり知りません、宝石はパッケージ化/作られています。しかし、なぜgemsパブリックフォルダーの画像/js/cssのものをアプリパブリックフォルダーにコピーできないのですか?私はちょうどそれをしました、そしてそれは私のために働きました。それは完了したことではありませんか?