В моей работе я унаследовал приложение Rails от разработчика, не имеющего более длинного или реального времени. Это API, развернутый на сервере AWS EC2 с Capistrano и Rubber.Приложение, управляемое Capistrano Rails, указывающее на неправильный выпуск
Обычно это работает нормально, но в последнее время возникли две странные проблемы.
Статические страницы перестали загружать активы на производстве. В основном, они, похоже, указывали на файлы с отпечатками пальцев (то есть
assets/home/application-30913401938134.css
), которые действительно существуют, когда я SSH на сервер, но файлы не загружаются успешно, и когда я пытаюсь перейти непосредственно к ним (myapp.com/assets/home/application-30913401938134.css
), я получаю 404 стр.Я верю (но я не уверен на 100%) после начала вышеуказанная проблема, сам API начал неудачу - особенно все конечные точки, которые делают
json
представления (с использованием JBuilder). Ошибка всегда вариант:{ "message": "Missing template layouts/my-controller-name with {:locale=>[:en], :formats=>[:json], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :slim, :jbuilder, :coffee, :md]}. Searched in:\n * \"/ebs/my-app-staging/releases/20160621212418/app/views\"\n * \"/ebs/my-app-staging/shared/bundle/ruby/2.1.0/gems/apipie-rails-0.3.6/app/views\"\n * \"/ebs/five_api-staging/shared/bundle/ruby/2.1.0/gems/kaminari-0.16.1/app/views\"\n", "type": "ActionView::MissingTemplate" }
Ключевым моментом в указанном выше (до упора вправо) является releases/20160621212418
. Это важно, потому что этот выпуск не самый последний выпуск. И действительно, если я буду развертывать снова и снова, это сообщение об ошибке остается тем же, дословно, ссылаясь на релиз, который был удален с сервера.
Некоторые предпосылки, потому что я не уверен, насколько типична эта настройка. Я могу использовать SSH на сервере и перейти к моему приложению (в частности,
ebs/my-app-staging/current
). Это каталогcurrent
является символической ссылкой на один из релизов вebs/my-app-staging/releases
. Обычно существует 3 выпуска, каждый из которых имеет каталог приложений Rails в соответствии с временем развертывания (то есть20160621212418
, самый старый из которых обрезается как часть сценария развертывания). Выпуск20160621212418
, в котором упоминается об ошибке, не входит в число 3.
Я попытался запустить команду в терминале SSH'd повторно симлинк current
фактической самой последней папке релиза (не тот, что кажется для поиска в представлениях и потенциально активах), надеясь, что оба вышеупомянутых вопроса возникнут из одного и того же неправильного приложения.
Эта команда:
sudo -p 'sudo password: ' rm -f /ebs/my-app-staging/current && sudo -p 'sudo password: ' ln -s /ebs/my-app-staging/releases/20160621223232 /ebs/my-app-staging/current
Теперь, когда я бегу ls -l
, это выглядит как current
указывает на правом выпуска, но попав результаты API в одной и той же ошибки (ищет просмотров в неправильном выпуске).
Все что сказать:
Я действительно смущены этим. Почему контроллер должен указывать на представление в другой версии?
Какие-либо файлы/данные, которые могут быть полезны для решения этой проблемы?
Является ли это известной/периодической проблемой Капистрано? Есть ли способ решить эту проблему?
Должен ли я перезапустить свой сервер?
Есть ли способ узнать, какой номер выпуска действительно обслуживается Капистрано?
Любая идея, какие действия могут вызвать это в первую очередь? Я, очевидно, не хочу повторно переписывать и перезагружать свой сервер вручную при каждом развертывании.
Любые общие мысли/предложения по поводу [отладки] этого?
Кстати, не совсем связан - когда я думал, что я только что, что первый вопрос, я перепробовал все виды активов трубопровода, связанные исправления:
config.serve_static_files = true
, ручной компиляция активов и т.д. Но это выглядит как будто файлы там - только то, что приложение не обслуживает правильно отпечатки пальцев, я думаю, потому что он смотрит в неправильный каталог.
Возможно, дубликат: http://stackoverflow.com/questions/37737917/unicorn-doesnt-pick-up-changes-with-new-deploy-of-rails-app-capistrano-nginx/37799814? –