8

В общем, разобравшись что да как, опишу всю ситуацию.

Имеется CloudFlare. У него в настройках домена включил Development Mode. Но навряд ли тут CloudFlare вообще на что-то влияет.

Идем дальше.

Если проект запускать в режиме development, то все нормально. Перекомпилирует ресурс, если тот был изменен и ресурс успешно доступен по адресу: http://site.ru/assets/application-md5-hash.css

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

  1. Я выполнил rake assets:precompile, что сгенерировало в свою очередь в каталоге /public/assets все необходимое. Имена файлов и хеш в этих именах сходятся (исходный код в браузере + то что на сервере).

  2. На самом сайте у всех скриптов и стилей ошибка, мол, 404 - нет тут ничего. Например, для этого стиля: http://site.ru/assets/application-md5-hash.css. Если прописать public до assets, то он находит стиль/скрипт. Но это не решает проблему. Должен быть доступ по http://site.ru/assets/.

  3. Спустя длительное время у меня начал находить ресурс, но только application.css, application.js и global.js. Но помимо них еще есть персональные стили/скрипты такие как, например, news.css/js или comments.css/js. У них попрежнему 404 ошибка.

  4. Далее я повысил версию в assets.rb. Снова выполнил rake assets:precompile. Все вернулось к исходной точке - у всех 404 ошибка. Ничего нет.

Я абсолютно ничего не трогал в production.rb. Он как сгенерировался при создании проекта - так и лежал до сегодняшнего дня. Притом я как-то, в начале создания проекта, запускал проект в production режиме. И все ресурсы тогда грузились без проблем.

Как блин это исправить? Почему такой бред?

Colibri
  • 1,825
  • Я точно не уверен, но...

    Я удалил каталог assets в public и опция в production.rb: config.assets.compile = true Начала работать. То есть теперь все ресурсы находит...

    Это можно расценивать как баг фреймворка?

    – Colibri Jun 04 '16 at 13:13
  • Хе. А через что у вас проходят соединения к серверу приложения? Только через CloudFlare, или там ещё nginx есть по пути? –  Jun 04 '16 at 14:13
  • @Кнопкатык связка Apache + Nginx по пути. Но там ничего противозаконного нет. – Colibri Jun 04 '16 at 23:43
  • Хм. То есть, без CF оно нормально работает, я так понимаю. И статику отдаёт nginx. –  Jun 05 '16 at 09:15
  • @Кнопкатык CloudFlare тут вообще ни при чем. В первом ответе я написал в чем возможно была проблема. По крайней мере, как только я это сделал, все стало нормально. – Colibri Jun 05 '16 at 17:58
  • Ну, раздачей статики Rails не занимается, так что необходимость добавить public похоже на косяк в настройке вебсервера. Ковырять настройки приложения в этом случае бесполезно. Опцию assets.compile лучше убрать, приложение в production вообще при запуске не должно париться про ассеты. –  Jun 05 '16 at 18:04
  • config.assets.compile = true для prooduction лучше оставьте по умолчанию(false), иначе у вас часто с запросом сайта будут компилироваться ресурсы, это приведет к замедлению общей загрузки сайта. То, что у вас не видны отсальные ресурсы, скоре всего не ошибка - rails в production по умолчанию использует "файлопровод ", т е в том числе объединяет все стилевые файлы и js код в 2 больших файла, чтобы уменишить количество обращений к серверу. Посмотрите, может всетаки все что надо грузится? – Viktor Mar 30 '17 at 18:29

0 Answers0