Железнодорожный актив не работает в производственной среде? - PullRequest
7 голосов
/ 04 октября 2011

Я недавно обновил приложение с Rails 3.0 до 3.1. Я следовал всем инструкциям по включению конвейера активов, но он всегда дает сбой, когда в среде production :

<%= javascript_include_tag "application" %>

дает мне

<script src="/javascripts/application.js" type="text/javascript"></script>

, в котором отсутствует дайджест, и я получаю следующую ошибку:

cache: [GET /javascripts/application.js] miss
Started GET "/javascripts/application.js" for 127.0.0.1 at 2011-10-03 23:31:36 +0100
ActionController::RoutingError (No route matches [GET] "/javascripts/application.js"):

Я пробовал варианты этих настроек в application.rb:

require File.expand_path('../boot', __FILE__)

#require 'rails/all'
require "action_controller/railtie"
require "action_mailer/railtie"
require "active_resource/railtie"
require "rails/test_unit/railtie"

if defined?(Bundler)
  # If you precompile assets before deploying to production, use this line
  Bundler.require *Rails.groups(:assets => %w(development test))
  # If you want your assets lazily compiled in production, use this line
  # Bundler.require(:default, :assets, Rails.env)
end


module Blog
  class Application < Rails::Application
    config.autoload_paths += %W(#{config.root}/lib)
    config.encoding = "utf-8"
    config.filter_parameters += [:password]
    config.assets.enabled = true
    config.assets.version = '1.0'
  end
end

и full production.rb (без некоторых комментариев)

Blog::Application.configure do
  config.cache_classes = true
  config.consider_all_requests_local       = false
  config.action_controller.perform_caching = true
  config.serve_static_assets = false
  config.assets.compress = true
  config.assets.compile = false
  config.assets.digest = true
  config.i18n.fallbacks = true
  config.active_support.deprecation = :notify
end

Я выполнил задачу rake assets:precompile.

Я пропускаю какие-либо очевидные шаги?

Редактировать: Некоторые дополнительные сведения:

Мои активы находятся в папке app/assets. app/assets/images, app/assets/javascripts, app/assets/stylesheets и т. Д.

Я вижу мои файлы, сгенерированные в моем каталоге public/assets с именами и дайджестами.

app/assets/javascripts/application.js действительно компилируется в нечто вроде public/assets/application-6ec417a53cb2bdb949966a153a61e7b1.js Они попадают в каталог public.

Ответы [ 2 ]

12 голосов
/ 06 октября 2011

Звездочки не загружаются.

В попытке удалить активную запись в предыдущей версии rails (а-ля этот вопрос Удалить ActiveRecord в Rails 3 (бета) ) require 'rails/all' было заменено на

require "action_controller/railtie"
require "action_mailer/railtie"
require "active_resource/railtie"
require "rails/test_unit/railtie"

Чего здесь не хватало, было sprockets/railtie

3 голосов
/ 04 октября 2011

См. Обновление до Rails 3.1 Railscast

Убедитесь, что ваши активы находятся в папке app/assets. app/assets/images, app/assets/javascripts, app/assets/stylesheets и т. Д.

Выполнить rake assets:precompile

Вы должны увидеть файлы, сгенерированные в каталоге app/public/assets с именами и дайджестами, если они включены.

app/assets/javascripts/application.js будет компилироваться в /assets/application-6ec417a53cb2bdb949966a153a61e7b1.js

Если ресурс назван аналогично приведенному выше с дайджестом, Production.rb должен иметь следующую конфигурацию:

# Generate digests for assets URLs
config.assets.digest = true

Если вы посмотрите на источник веб-страницы, вы должны увидеть что-то похожее на следующее:

<script src="/assets/application-6ec417a53cb2bdb949966a153a61e7b1.js" type="text/javascript"></script>

Попробуйте вручную загрузить файл, перейдя к http://example.com//assets/application-6ec417a53cb2bdb949966a153a61e7b1.js

Файл должен загрузиться, если не попробовать проверить права доступа и дальнейшие журналы.

...