Rails Openshift Hot Deploy активы не обслуживаются
У меня есть приложение Rails, развернутое на Openshift. Я добавил маркер для горячего развертывания, и само горячее развертывание работает нормально, но во время горячего развертывания приложения файлы css и js не обслуживаются. Когда горячее развертывание заканчивается, эти файлы снова работают нормально. В этом приложении я также использую Bootstrap и Sass (gem "bootstrap-sass"). У вас есть идеи, почему это происходит?
3 ответа
Я исправил эту проблему, и теперь она работает. Я объясню, что я сделал, может быть, это кому-нибудь поможет.
По сути, необходимо предварительно скомпилировать ваши ресурсы локально, а также зафиксировать и отправить их. Это сделано
активы рейка: прекомпиляция RAILS_ENV= производство
Но есть гоча!!! Локально предварительно скомпилированные ресурсы не совпадают с теми, которые сгенерированы в Openshift. Как это возможно? В Openshift есть ошибка, из-за которой активы генерируются на производстве с помощью RAILS_ENV=development:/ Подробнее здесь:
https://github.com/openshift/origin-community-cartridges/issues/8
поэтому необходимо добавить переменную среды в ваше приложение:
rhc set-env RAILS_ENV= production -a имя_приложения
затем сгенерированные активы совпадают.
Таким образом, после исправления, когда во время изменений в активах, мы должны их предварительно скомпилировать. И чтобы они работали во время горячего развертывания, в репо должны быть как старые предварительно скомпилированные активы, так и новые предварительно скомпилированные активы. Например: если у вас есть старый файл:
Приложение-10770925dc8abd4ceab34119af4032163cc5a94f3523d60d321f33a999171d58.css
и новый предварительно скомпилированный файл:
Приложение-82f6fca47056cbda52cb32086051f031b880e2630a137f0e41e96cb2eef923ee.css
они оба должны быть в хранилище. Во время горячего развертывания на старый ресурс все еще ссылаются, поэтому он должен находиться в репозитории. После горячего развертывания ссылка на новый ресурс В следующем коммите и толчке старый актив может быть удален.
Так что в основном эта проблема исправлена для меня, и теперь горячее развертывание работает нормально.
Одним из решений является размещение ваших активов в отдельном работающем проекте, поскольку нет простого способа сделать их доступными как всегда, как объясняет @developercorey.
Это, вероятно, не лучшее решение, но это будет простое решение для патчей, которое не тесно связано с какой-либо конкретной хостинговой платформой.
Файлы обслуживаются Apache через модуль Passenger. Файлы заменяются "на месте", что приводит к их удалению / восстановлению, что приводит к тому, что они не обслуживаются в течение этого времени, и поскольку они являются статическими ресурсами, они не сохраняются в памяти. К сожалению, в настоящее время нет способа заставить горячее развертывание полностью работать с Rails, чтобы сайт работал на 100% во время его развертывания.