2010-09-29 96 views
3

这是我第一次部署。我做了一个帽子deploy:setup,它工作得很好。capistrano deploy_symlink失败

然后,当我尝试执行cap deploy:update时,我遇到了错误消息。东西沿线

rm: cannot remove `/var/www/app_name/current': Is a directory 

这是我的capfile和目录权限。

http://pastie.org/1189919

一般来说,什么是最好的做法,只要部署用户和权限都在关注?我应该使用root还是创建一个不同的用户。如果不同的用户需要什么确切的权限?

感谢

回答

6

您是否在/var/www/app_name内创建了目录,还是由capistrano创建?

无论如何,你的问题是/var/www/app_name/current不应该是一个目录 - 它应该是在/var/www/app_name/releases/当前版本的符号链接。当capistrano完成在/var/www/app_name/releases/内创建新版本文件夹并正在尝试将/var/www/app_name/current符号链接到该文件夹​​时,会导致失败。

您可能能够通过重命名/var/www/app_name/current解决您的问题,(让你有一个备份,如果出了问题),并在/var/www/app_name/releases/创建从/var/www/app_name/current一个符号链接到最新的版本,然后做一个cap deploy。 (删除你的当前备份,如果这个工程)。

就最佳实践而言,无论你做什么,都不使用根。相反,设置一个只对所需目录具有权限的用户(或使用现有用户)(没有仔细阅读你的脚本,但可能只是/var/www/app_name

+0

@badnaam:你为什么把这个标记为答案,然后再删除答案标记?它不准确吗?如果有什么我错过了,留下评论并让我知道。 – SamStephens 2010-09-30 00:38:57

0

要部署一个新的版本,你应该调用cap deploycap deploy:migrations,不cap deploy:update

0

我也有过这样的错误。更新源代码并重新启动服务器似乎总是在简单脚本的各个位置出现问题

有时它会抱怨github上的哈希值与某个期望值不匹配,有时它不会更新目录因为它已经存在,但主要是它想要创造存在的东西。

难道没有办法强制Capistrano,因此shell命令是ju st DO IT?我至少会感激它问我,如果遇到这种类型的错误,而不是失败并回滚,应该怎么做。特别是当它是一个简单的文件操作。

我最终不得不在服务器上手动删除东西,以便Capistrano脚本运行时不会失败。这显然不是前进的方向。