首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Capistrano 3:"find ... -exec ...“任务中的命令语法

Capistrano 3:"find ... -exec ...“任务中的命令语法
EN

Stack Overflow用户
提问于 2021-02-13 23:34:45
回答 1查看 35关注 0票数 0

在完成部署任务后,我正在尝试将此shell命令集成到Capistrano 3中:

代码语言:javascript
复制
find /var/www/mysite/somepath/ -type d -exec chmod 775 {} \;

然而,我在正确的Ruby语法上失败了。我尝试过以下几种最能想到的组合:

代码语言:javascript
复制
execute :find, "#{deploy_to}/somepath/ -type d -exec chmod 775 {} \;"

代码语言:javascript
复制
execute :find, "#{deploy_to}/somepath/", "-type d", "-exec", "chmod", "755", "{}", ";"

但总是以错误结束:find: missing argument to -exec

有没有人能帮我找出正确的方法来分隔这个命令的参数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-14 16:29:20

您使用了错误的命令,:find是用于使用ruby函数的,但是您想要使用linux实用程序的find。请尝试以下内容

代码语言:javascript
复制
execute "find /var/www/mysite/somepath/ -type d -exec chmod 775 {} \\;"

别忘了在最后我有两个斜杠用来终止命令。但是有更好的方法可以使用下面的命令

代码语言:javascript
复制
set :file_permissions_paths, ["app/logs", "app/cache"]

我在我的老项目中使用了它,如下所示

代码语言:javascript
复制
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"]

我认为不要设置所有的权限都是个好主意,但是当我第一次设置权限的时候,我很久以前也很困惑,我使用了下面的任务,它会完全按照你的要求改变所有的权限

代码语言:javascript
复制
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。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66186835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档