在完成部署任务后,我正在尝试将此shell命令集成到Capistrano 3中:
find /var/www/mysite/somepath/ -type d -exec chmod 775 {} \;然而,我在正确的Ruby语法上失败了。我尝试过以下几种最能想到的组合:
execute :find, "#{deploy_to}/somepath/ -type d -exec chmod 775 {} \;"和
execute :find, "#{deploy_to}/somepath/", "-type d", "-exec", "chmod", "755", "{}", ";"但总是以错误结束:find: missing argument to -exec
有没有人能帮我找出正确的方法来分隔这个命令的参数?
发布于 2021-02-14 16:29:20
您使用了错误的命令,:find是用于使用ruby函数的,但是您想要使用linux实用程序的find。请尝试以下内容
execute "find /var/www/mysite/somepath/ -type d -exec chmod 775 {} \\;"别忘了在最后我有两个斜杠用来终止命令。但是有更好的方法可以使用下面的命令
set :file_permissions_paths, ["app/logs", "app/cache"]我在我的老项目中使用了它,如下所示
set :permission_method, :chmod
set :use_set_permissions, true
set :writable_dirs, ["app/cache", "app/logs"]
set :file_permissions_paths, ["app/log", "app/cache", "storage"]我认为不要设置所有的权限都是个好主意,但是当我第一次设置权限的时候,我很久以前也很困惑,我使用了下面的任务,它会完全按照你的要求改变所有的权限
namespace :deploy do
task :check_permissions do
on roles(:web) do
execute "chmod -R 0777 #{release_path}"
execute "echo 'finished'"
execute " /bin/systemctl restart nginx"
#execute "cd #{deploy_to}/current && /usr/bin/env rake countries:update RAILS_ENV=production"
end
end
end它有很多东西你可以移除,然后尝试你想要做的事情。请注意,这些都是非常旧的代码,即使我不记得它们在做什么,因为我不再使用capistrano进行部署,而主要是使用dockers。
https://stackoverflow.com/questions/66186835
复制相似问题