7

宝石としてバンドルしたエンジン(gmaps4rails)を構築しています。エンジンの/publicを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"):

私はいくつかのことをしました:

  1. 私のアプリのproduction.rbで、次のように設定しました。

    config.serve_static_assets = true

    これは問題を解決しますが、十分にエレガントではありません。falseのままにして、エンジンに構成を追加したいと思います:)

  2. 私はここでのアドバイスに従いましたが成功しませんでした。

4

6 に答える 6

7

パフォーマンス上の理由から、本番モードでは静的アセットの提供が無効になっています。これらのアセットを提供するように Web サーバーを構成する必要があります。

nginx をウェブサーバーとして使用している場合は、このディスカッションを参照してください。

于 2010-11-25T21:50:14.213 に答える
5

Rails 3.x では、config/environments/production.rb でこれを設定してみてください

config.serve_static_assets = true

デフォルトでは、Rails はアセット サーバー (lightttp、nginx、または Apache) を使用していると想定します。

于 2011-01-11T19:46:56.407 に答える
4

エンジンで、次を置き換えます。

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
于 2011-03-27T11:16:28.133 に答える
2

これを Rails::Engine クラスに追加しようとしましたか:

initializer "static assets" do |app|
  app.middleware.use ::ActionDispatch::Static, "#{root}/public"
end

これにより、Gem の /public ディレクトリが実行時にアプリとマージされます。

于 2010-11-24T16:50:54.010 に答える
1

Rails 3.1エンジンをマウントする際にも同様の問題がありました。ステージとプロダクションで空白のアセットを受け取っていました。

http://jonswope.com/2010/07/25/rails-3-engines-plugins-and-static-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

もっとエレガントな方法があると思いますが、今日の私の努力では実質的なものは何も得られませんでした.

于 2012-02-01T01:36:29.107 に答える
0

方法についてはよくわかりません。宝石はパッケージ化/製造されています。しかし、gemsパブリックフォルダーのimages / js / cssのものをappsパブリックフォルダーにコピーできないのはなぜですか?私はちょうどそれをしました、そしてそれは私のために働きました。それはやったことではありませんか?

于 2011-02-22T23:55:58.357 に答える