由于我以root身份运行我的rails应用程序,因此它会在tmp目录中创建root所拥有的文件.因为这
cap production deploy:cleanup
Run Code Online (Sandbox Code Playgroud)
无法删除旧版本,因为它不是以root身份运行的.
我查看了capistrano v3代码,但是我没有看到以root身份运行cleanup命令的方法.是否缺少此选项或是否出现此问题,因为我在部署流程的另一个位置执行了错误操作.
我以root身份启动应用程序,因为我需要绑定到端口80.
foo*_*bar 11
您还可以做的是在清理旧版本之前触发任务:
namespace :deploy do
before :cleanup, :cleanup_permissions
desc 'Set permissions on old releases before cleanup'
task :cleanup_permissions do
on release_roles :all do |host|
releases = capture(:ls, '-x', releases_path).split
if releases.count >= fetch(:keep_releases)
info "Cleaning permissions on old releases"
directories = (releases - releases.last(1))
if directories.any?
directories.each do |release|
within releases_path.join(release) do
execute :sudo, :chown, '-R', 'deployuser', 'path/to/your/files/writtend/by/root'
end
end
else
info t(:no_old_releases, host: host.to_s, keep_releases: fetch(:keep_releases))
end
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
请注意,您需要为部署用户提供执行此特定sudo命令的权限(使用sudoers定义文件).
我查看了 capistrano v3 代码,但没有找到以 root 身份运行清理命令的方法。是否缺少此选项,或者发生此问题是因为我在部署流程的另一个地方做错了什么。
Capistrano 没有秘密武器,我们依赖您正确设置部署用户的权限,如http://www.capistranorb.com/中所述
删除目录需要write父目录的权限,也就是说,给定以下目录结构:
/var/www/releases/
\- 20131015180000
\- 20131015181500
\- 20131015183000
Run Code Online (Sandbox Code Playgroud)
您需要对该目录具有写/var/www/releases/权限,因为该目录中的文件和目录列表存储在该目录中。
在 UNIX 和 Linux 中,删除文件的能力不是由该文件的访问位决定的。它由包含该文件的目录的访问位决定。
写权限授予修改文件的能力。当为目录设置时,此权限授予修改目录中条目的能力。这包括创建文件、删除文件和重命名文件。
| 归档时间: |
|
| 查看次数: |
3797 次 |
| 最近记录: |