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

Почему stylesheet_link_tag не ссылается на/активы в производстве?

Я только что сделал первое развертывание для нового приложения Rails 3.1, но активы, похоже, работают некорректно. Я предварительно компилирую все при развертывании, и он появляется в public/assets, как ожидалось. Однако вывод, например, stylesheet_link_tag "application" в моем макете, имеет href, указывающий на /stylesheets/application.css. Это явно не работает.

Странно то, что в режиме разработки все кажется прекрасным, оно ссылается на /assets/application.css, как ожидалось.

Я сравнивал файлы config/application.rb и config/environments/production.rb с другим приложением, которое у нас есть в конвейере ресурсов, и соответствующие настройки кажутся одинаковыми.

Где я должен смотреть?

4b9b3361

Ответ 1

Когда хелпер генерирует этот код:

/stylesheets/application.css

Это связано с тем, что конвейер НЕ включен в любом режиме, в котором вы находитесь. Существует несколько возможных причин.

  • У вас включен конвейер в неправильном файле конфигурации. (Конвейер должен быть включен в файле конфигурации application.rb)

  • Вы включили его в application.rb и отключили в другом месте.

  • Вы случайно прокомментировали ритуал где-то

Подробнее см. этот вопрос.

Если это обновленное приложение, проверьте все параметры конфигурации в последний раздел руководства по конвейеру, чтобы убедиться, что у вас есть их все правильно установлены.

Ответ 2

Я знаю, что это для rails 3.1, но очень похожая ошибка может случиться с пользователями рельсов 4, так что для полноты и помощи будущим гуглерам. Наиболее вероятная причина заключается в том, что вы не добавили этот актив в директиву precompile в production.rb, это выглядит так:

# Precompile additional assets.
# application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
config.assets.precompile += %w(  )

Как сказал OP, application.css не добавлялся, и симптом является URL-адресом, начинающимся с /stylesheets или/javascripts, а не с активами. Таким образом, решение -

config.assets.precompile += %w( your_assets.css your_assets.js )

Ответ 3

Я бы предложил вам включить config.assets.compile = false (по умолчанию) в true в production.rd и увидеть, что активы обслуживаются как в developemnt. Если они правильно поданы, вы должны проверить свой application.css, чтобы убедиться, что вы включаете другие таблицы стилей в каталог правильно, как с файлами css

/*
*= require scaffold
*= require pagination
*= require_self
*= require_tree.
*/

где scaffold и pagination являются css файлами. или упомянуть их под флагом config.assets.precompile, как показано ниже.

config.assets.precompile + =% w (pagination.css scaffold.css)

Я предполагаю, что причиной являются прекомпиляционные работы (application.js, application.css и все не-JS/CSS уже добавлены), и любые добавочные активы должны быть добавлены в флаг config.assets.precompile.

Ответ 4

Я думал, что активы должны были быть app/assets not public/assets, но я могу ошибаться.