【问题标题】:When Capistrano3 does mkdir, permission denied当 Capistrano3 执行 mkdir 时,权限被拒绝
【发布时间】:2023-12-27 21:27:01
【问题描述】:

当我执行bundle exec cap production deploy 时,我收到了mkdir: cannot create directory /usr/share/nginx/www/appname/releases/20131216155457: Permission denied 之类的错误消息

Capistrano3 没有set use_sudodefault_run_options。我读到 Passwordless sudo 更好,所以我做了 visudo username ALL=NOPASSWD:ALL,但我仍然遇到同样的错误。

set :application, 'appname.com'
set :repo_url, 'git@bitbucket.org:user/myapp.git'
set :user, 'username' 
set :branch, 'master'


set :deploy_to, '/usr/share/nginx/www/appname'
set :keep_releases, 5

namespace :deploy do

 desc 'Restart application'
 task :restart do
   on roles(:app), in: :sequence, wait: 5 do
   end
 end

 after :restart, :clear_cache do
   on roles(:web), in: :groups, limit: 3, wait: 10 do
   end
 end

 after :finishing, 'deploy:cleanup'

end

有人就这个问题给我任何建议吗? 感谢您的帮助。

【问题讨论】:

  • 您先运行cap production deploy:setup 了吗?是否所有父目录都存在?
  • Capistrano3 似乎没有cap production deploy:setup。但我做了cap production deploy:check,我检查了所有父目录是否存在。
  • @YukiIshikawa 所有权限都正确吗?作为“用户名”,您可以在 ssh 进入后自己创建该目录吗?
  • @PhilipHallstrom 是的,当我使用这个“用户名”在服务器上 ssh 时,我可以在没有 sudo 命令的情况下使用 mkdir。
  • @PhilipHallstrom 好吧,我再次检查,发现我可以在主目录中mkdir,但我不能在“appname”目录中mkdir。当我chmod 777 releases/repos/sharedcap deploy 工作时,但我认为这不是正确的方法。

标签: ruby-on-rails capistrano capistrano3


【解决方案1】:

尝试设置appname文件夹的组和所有者

chown deployer:www-data -R /usr/share/nginx/www/appname

其中 deployer 是您的部署用户,group 是用户组

【讨论】:

    【解决方案2】:

    应该是

    chown username:groupname -R /path/to/project
    

    【讨论】: