2012-03-14 4 views
17

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

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

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

rake assets:clean 
rake assets:precompile 

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

Однако во время выполнения, вот что я вижу каждый 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" %> 

Asset трубопроводные соответствующие настройки в 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 

И, наконец, настройки активов от конфигурации/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" 

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

+0

Связанный/дубликат: http://stackoverflow.com/questions/5760661/rails-favicon-ico-not-found –

ответ

26

Далее ИССЛЕДОВАНИЕ этого вопроса дали эту SO статью:

application.css not being served as an asset

Кажется

config.serve_static_assets = false 

Является ли неправильная настройка до тех пор, как мой Rails приложение не работает за Apache или Nginx

+0

Я был пойман этим. Обычно используют Apache, но в этом случае использовал Thin через IIS. Благодаря! – kim3er

4

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

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

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

Correct (использует дерзость):

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

+0

Эй, спасибо! Однако, поскольку этот вопрос был опубликован, мы закончили перенос активов на CDN, но я буду помнить об этом для будущих проектов Rails! – BrMcMullin

+0

Добро пожаловать! : D –

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