Почему stylesheet_link_tag не ссылается на / assets в производстве? - PullRequest
13 голосов
/ 11 января 2012

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

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

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

Куда мне смотреть?

Ответы [ 4 ]

14 голосов
/ 12 января 2012

Когда помощник генерирует этот код:

/stylesheets/application.css

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

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

  • Вы включили его в application.rb и отключили где-то еще.

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

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

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

7 голосов
/ 28 ноября 2013

Я знаю, что это для rails 3.1, но очень похожая ошибка может произойти с пользователями rails 4, так что для полноты картины и для помощи будущим гуглерам.Наиболее вероятная причина - вы не добавили этот ресурс в директиву прекомпиляции в 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 )
1 голос
/ 11 января 2012

ВНИМАНИЕ: установка config.assets.compile = true в рабочем состоянии может сделать ваше приложение уязвимым для Уязвимости Rails Asset Pipeline, связанной с обходом каталога (CVE-2018-3760) * .

Iпредложил бы включить config.assets.compile = false (по умолчанию) в true в production.rd и посмотреть, что ресурсы обслуживаются как в developmnt.Если они правильно обслуживаются, вам следует проверить файл 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.

0 голосов
/ 12 января 2012

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

...