为什么我在capistrano生成的文件部署中获得Permission denied错误?
我遇到了failed: "sh -c 'cd /var/www
-c’cd failed: "sh -c 'cd /var/www
错误。然后通过在deploy.rb中添加以下内容来修复它…
set :default_environment, { 'PATH' => "/var/lib/gems/1.9.1/bin:$PATH" }
现在我收到了这个新错误。
** [out :: ip.address] Rails Error: Unable to access log file. Please ensure that /var/www/releases/20111208152807/log/production.log exists and is chmod 0666. The log level has been raised to WARN and the output directed to STDERR until the problem is fixed. ** [out :: ip.address] mkdir -p /var/www/releases/20111208152807/public/assets ** [out :: ip.address] mkdir -p /var/www/releases/20111208152807/public/assets ** [out :: ip.address] mkdir -p /var/www/releases/20111208152807/public/assets ** [out :: ip.address] ** [out :: ip.address] mkdir -p /var/www/releases/20111208152807/public/assets ** [out :: ip.address] mkdir -p /var/www/releases/20111208152807/public/assets ** [out :: ip.address] ** [out :: ip.address] rake aborted! ** [out :: ip.address] ** [out :: ip.address] Permission denied - /var/www/releases/20111208152807/public/assets/manifest.yml
所以我用ls -lha检查了manifest.yml和production.log的权限,是的,它们归root所有。
capistrano 部署由拥有/ var / www目录的linux用户(非root用户)完成 。 我猜是因为创建这些文件的任何命令都赋予它们root权限。
澄清 :我知道可能只是使用root部署将解决问题,但我不想使用root。
您永远不应该拥有root
拥有的Web应用程序文件,它们应该由非特权用户拥有。 虽然用户在Web服务器和Web服务器的设置方式之间存在差异,但用户通常是www-data
(对于Apache)或nobody
(对于Nginx)。
要删除错误,您需要运行错误中提到的命令:
chmod 0666 /var/www/releases/20111208152807/log/production.log
将文件设置为读取每个用户的写入权限。
这些权限可能有点宽松,因此如果您有需要,可以限制它们。
- Rails Capistrano 3 – 如何将production.log文件共享到Capistrano的共享文件夹中?
- 从capistrano任务中调用多级capistrano任务
- 使用capistrano部署rails应用程序时的符号链接警告
- 如何通过capistrano进入生产轨道控制台?
- Rails 3 app,如何获得GIT版本和更新网站?
- 如何告诉Bundler使用全系统安装的gems(生产部署)?
- 通过脚本设置rvm设置EC2服务器
- Capistrano:my.server.ipadress上不存在链接文件database.yml
- capistrano – NameError:未初始化的常量Net :: SSH :: KnownHosts :: SUPPORTED_TYPE