2010-11-24 4 views
6

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

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

Бревна сказать следующее (только аннотацию):

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

    Это решает проблему, но не достаточно изящна, я хотел бы получить ке ep it to false и добавить конфигурацию в двигатель :)

  2. Я последовал совету here без успеха.

ответ

7

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

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

1

Вы пытались добавить это в ваш Rails :: класс двигателя:

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

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

+0

Спасибо за ваш ответ, я попытался, но это не имеет никакого значения :) – apneadiving 2010-11-24 17:36:53

5

В Rails 3.x попытаться установить это в конфигурации/сред/production.rb

config.serve_static_assets = True

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

0

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

+2

Это означает, что каждый, кто использует ваш драгоценный камень, должен вручную скопировать публичные файлы в основное приложение ... Нет, это не сделано предмет! – 2012-02-22 20:40:11

3

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

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

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

Смежные вопросы