Подтвердить что ты не робот

Почему Rails не найдет мои активы?

В режиме производства рельсы не могут найти никаких предварительно скомпилированных активов из конвейера активов.

Я использую rails 3.2.0 и ruby ​​1.9.3, работающие внутри RVM на CentOS. Никакой дополнительный веб-сервер не работает вместе с этим приложением. Приложение было недавно обновлено, чтобы использовать конвейер активов, поскольку он был первоначально приложением rails 3.0.

После запуска

rake assets:clean
rake assets:precompile

Я вижу хешированный контент в public/assets, как и следовало ожидать. Хэши в конце файлов соответствуют тем, которые я вижу в источнике страницы.

Тем не менее, во время выполнения, вот что я вижу для каждого актива Rails пытается служить:

Started GET "/assets/application-892c6227e631daf9a8e041b1d4d002ec.css" for 75.149.58.169 at 2012-03-14 11:42:43 -0700

ActionController::RoutingError (No route matches [GET] "/assets/application-892c6227e631daf9a8e041b1d4d002ec.css"):

Я не имею в виду папку, в которой размещается каждый актив; все ссылки на активы выглядят так:

//css:
.class {
  background: url(asset.png) no-repeat;
}

//erb:
<%= image_tag "asset.png" %>
<%= link_to "page", :class => "class" %>

Соответствующие настройки трубопровода активов в файле production.rb:

config.serve_static_assets = false
config.assets.enabled = true
config.assets.compress = true
config.assets.debug = false
config.assets.compile = false
config.assets.digest = true

И, наконец, параметры актива из config/application.rb:

config.assets.enabled = true
config.assets.version = '1.0'

Пользователь, запускающий серверный процесс rails, имеет права на чтение, запись и выполнение для public/assets, поэтому я не думаю, что это проблема с правами. Я пропустил шаг конфигурации?

Edit

Я заметил, что нет ошибок, заявляющих, что активы не предварительно скомпилированы, поэтому я попытался получить доступ к таблице стилей с веб-страницы, добавив "/assets/application-892c6227e631daf9a8e041b1d4d002ec.css" в конец пути хоста:

http://www.myapp.com"/assets/application-892c6227e631daf9a8e041b1d4d002ec.css"

Это сработало, и таблица стилей открылась.

4b9b3361

Ответ 2

У меня была такая же проблема, но я отмечаю, что ваша таблица стилей указывает на непечатанную, не кэшированную версию файлов. Если вы используете конвейер активов, чтобы воспользоваться им, вам нужно использовать помощники, которые указывают на кешированную версию файлов с отпечатками пальцев. Для этого вам нужно либо вставить erb в ваш файл css, либо использовать sass.

Неправильно:

.class {
  background: url(asset.png) no-repeat;
}

Исправить (использует sass):

.class
  background: image-url('asset.png') no-repeat

Для получения дополнительной информации см. здесь: http://guides.rubyonrails.org/asset_pipeline.html#coding-links-to-assets

Если вам не нравятся проблемы с производительностью, вы можете избавиться от использования не кешированных версий до тех пор, пока не перейдете на Rails 4 или Rails 3.2.16, потому что эти версии вносят изменения, которые заставляют вас использовать актив (и соответствующий синтаксис). Если вы не используете новый синтаксис, не кэшированные версии вообще не будут работать при производстве.