在显示RoR代码更改之前,Linode似乎需要重启

我从一个开发者那里inheritance了一个我不能再联系的项目。 这是一个Ruby on Rails项目,在Linode上以SVN作为vcs。

我可以SFTP到服务器和更改文件,但更改不显示在网站上,直到我ssh和重新启动服务器。 这些不是对configuration文件的更改,只是对某些erb.html视图的简单更改。

在我以前使用Linode的经验中,我只是推了一下,所做的改变就显现出来了。 也许老开发者用svn钩子设置了一些东西?

我可以想到两种可能导致这种情况的可能性:

  1. caching 。 如果你使用PHP,那么我会认为这是APC的stat设置切换到Off 。 对Ruby不够熟悉,我只能猜测内置了一个OpCodecaching,并且重新启动整个服务器刷新caching。 您可能只需重新启动HTTP守护程序即可脱身。
  2. 启动脚本 。 可能有一个启动脚本运行一个subversion版本库的签出,或者可能是从一个目录到另一个目录的直接拷贝。 这也可能是现有脚本的一部分,例如启动HTTP守护进程的脚本。 再次,find脚本并运行它可以为您节省重启整个服务器的麻烦。

SVN post-commit hook当然可以用来完成这里所做的任何事情,甚至是重新启动服务器,但是我会提醒注意的是, 将代码部署到生产服务器应该有一定的控制权,并且应该与开发过程分开。 开发人员提出并自动立即部署的想法给了我heebie-jeebies。

你并不需要重启服务器,特别是不用Rails项目。 在最坏的情况下,您可能需要重新加载Apache / Nginx / Web服务器,但实际上,您可以在内部重新启动项目。

你可以做两件事之一。 假设您的项目由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 

或者重新加载web服务器(你需要确保你有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 

嘿presto。 您的项目现在在您提交时重新加载,您应该能够立即看到您的更改*(重新加载页面后)。

*这些钩子是SVN的。 他们可能在Git工作,谁知道,直到你尝试。 有人可能想检查我的情况下,我错了