0

В моей работе я унаследовал приложение Rails от разработчика, не имеющего более длинного или реального времени. Это API, развернутый на сервере AWS EC2 с Capistrano и Rubber.Приложение, управляемое Capistrano Rails, указывающее на неправильный выпуск

Обычно это работает нормально, но в последнее время возникли две странные проблемы.

  1. Статические страницы перестали загружать активы на производстве. В основном, они, похоже, указывали на файлы с отпечатками пальцев (то есть assets/home/application-30913401938134.css), которые действительно существуют, когда я SSH на сервер, но файлы не загружаются успешно, и когда я пытаюсь перейти непосредственно к ним (myapp.com/assets/home/application-30913401938134.css), я получаю 404 стр.

  2. Я верю (но я не уверен на 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, ручной компиляция активов и т.д. Но это выглядит как будто файлы там - только то, что приложение не обслуживает правильно отпечатки пальцев, я думаю, потому что он смотрит в неправильный каталог.

+0

Возможно, дубликат: http://stackoverflow.com/questions/37737917/unicorn-doesnt-pick-up-changes-with-new-deploy-of-rails-app-capistrano-nginx/37799814? –

ответ

0

Ваш вопрос не говорит нам, какое облако вы используете для развертывания приложения. Просьба также рассказать об этом, если вы используете AWS или героку или что?

+0

Это сервер AWS EC2. Я обновил свой вопрос выше. – Sasha

Смежные вопросы