Rails 3 Engine & Статические активы - PullRequest
7 голосов
/ 24 ноября 2010

Я создаю движок, который я упаковал как драгоценный камень (gmaps4rails). Я скопировал / public моего движка в / public моего приложения rails.

Все отлично работает в разработке, но не работает в производстве: похоже, статические ресурсы (моего движка и моего основного приложения) не найдены.

В журналах говорится следующее (только аннотация):

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

    Это решает проблему, но не достаточно элегантно, я хотел бы оставить это ложным и добавить конфигурацию в движке:)

  2. Я последовал совету здесь безуспешно.

Ответы [ 6 ]

7 голосов
/ 26 ноября 2010

По соображениям производительности обслуживание статических ресурсов отключено в производственном режиме.Ваш веб-сервер должен быть настроен для обслуживания этих активов.

Посмотрите на это обсуждение , если вы используете nginx в качестве веб-сервера.

5 голосов
/ 11 января 2011

В Rails 3.x попробуйте установить это в config / environment / production.rb

config.serve_static_assets = true

По умолчанию Rails предполагает, что вы используетесервер ресурсов (lightttp, nginx или Apache)

4 голосов
/ 27 марта 2011

В вашем двигателе замените:

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
2 голосов
/ 24 ноября 2010

Вы пытались добавить это в свой Rails :: Engine класс:

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

Это объединит каталог / public вашего Gem с приложением во время выполнения.

1 голос
/ 01 февраля 2012

У меня была похожая проблема при установке двигателя 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

Я думаю, что есть более элегантный способ, но мои усилия сегодня не принесли ничего существенного.

0 голосов
/ 23 февраля 2011

Я не знаю много о том, как драгоценные камни упакованы / сделаны.Но почему вы не можете скопировать файлы images / js / css из вашей общей папки gems в общую папку приложений?Я просто сделал это, и это сработало для меня.Разве это не сделано?

...