Назад | Перейти на главную страницу

Linode, кажется, требует перезагрузки перед отображением изменений кода RoR

Я унаследовал проект от разработчика, с которым больше не могу связаться. Это проект Ruby on Rails, размещенный на Linode, с SVN в качестве vcs.

Я могу подключиться к серверу по протоколу SFTP и изменить файлы, но изменения не отображаются на сайте, пока я не войду по ssh и не перезагружу сервер. Это не изменения в файлах конфигурации, а просто изменения в некоторых представлениях erb.html.

В моем предыдущем опыте использования git с Linode я просто нажимал кнопку, и изменения отображались в реальном времени. Может, старый разработчик что-то настраивал с помощью svn-хука?

Вам действительно не нужно перезагружать сервер, особенно с проектом Rails. В худшем случае вы можете захотеть перезагрузить выбранный вами Apache / Nginx / Webserver, но на самом деле вы можете просто перезапустить свой проект изнутри.

Вы можете сделать одно из двух. Предполагая, что ваш проект обслуживается Phusion Passenger, вы можете добавить привязку фиксации к своему репо на сервере, чтобы перезагрузить приложение ...

cd /wherever/your/svn/repository/is/hooks
touch post-commit
chmod 755 post-commit

а потом

#!/bin/sh
#post-commit hook. This will force Phusion to reload your RoR project
echo "Some message. Just letting you know I'm doing my job"
/bin/touch /wherever/your/project/is/tmp/restart.txt

Или перезагрузите веб-сервер (вам нужно убедиться, что у вас есть права sudo-without-password, иначе это не удастся. Это также вызовет обновление, даже если вы не используете Phusion)

#!/bin/sh
#post-commit hook. This will reload the webserver, forcing everything to reload.
echo "Some message. Just letting you know I'm doing my job"
sudo /sbin/service whatever-your-webserver-init-is reload

И привет. Теперь ваш проект перезагружается при фиксации, и вы должны сразу увидеть свои изменения * (после перезагрузки страницы).

* эти хуки предназначены для SVN. Они могут работать в Git, кто знает, пока вы не попробуете. Кто-то может захотеть проверить меня, если я ошибся

Я могу думать о двух возможностях, которые могли вызвать это:

  1. Кеширование. Если бы вы использовали PHP, я бы предположил, что это APC с stat настройка переключена на Off. Не будучи достаточно знакомым с Ruby, я могу только догадываться, что есть встроенный кеш OpCode и что перезапуск всего сервера очищает кеш. Возможно, вы сможете обойтись простым перезапуском HTTP-демона.
  2. Сценарий запуска. Это может быть сценарий запуска, который выполняет проверку репозитория Subversion или, возможно, прямую копию из одного каталога в другой. Это также может быть частью существующего скрипта, такого как тот, который запускает ваш демон HTTP. Опять же, поиск сценария и его запуск может избавить вас от необходимости перезагружать весь сервер.

Хук после фиксации SVN, безусловно, может использоваться для того, что здесь делается, даже до перезагрузки сервера, но я бы предостерегал от этого. Развертывание кода на производственном сервере - это то, над чем вы должны иметь определенный контроль, и это должно быть отделено от процесса разработки. Мысль о том, что разработчик что-то совершает и автоматически и мгновенно развертывает, вызывает у меня хиби-джиби.