Почему Rails не может найти мои активы? - PullRequest
17 голосов
/ 14 марта 2012

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

Я использую 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"):

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

//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, поэтому я не думаю, что это проблема с разрешениями.Я пропустил этап настройки?

Редактировать

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

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

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

Ответы [ 2 ]

26 голосов
/ 15 марта 2012

Дальнейшее изучение этой проблемы привело к появлению этой статьи SO:

application.css не является активом

Кажется

config.serve_static_assets = false

Неправильная настройка, если мое приложение Rails не работает за Apache или nginx

4 голосов
/ 15 июля 2013

У меня была такая же проблема, но я отмечаю, что ваша таблица стилей указывает на не-отпечатанную, не кэшированную версию файлов. Если вы используете конвейер ресурсов, чтобы воспользоваться им, вам нужно использовать помощники, которые указывают на отпечатанную в кэше версию файлов. Для этого вам нужно либо добавить 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, потому что в этих версиях внесены серьезные изменения, заставляющие вас использовать актив конвейер (и соответствующий ему синтаксис). Если вы не используете новый синтаксис, не кэшированные версии не будут работать вообще на производстве.

...