leo*_*nel 0 ruby deployment capistrano ruby-on-rails bundler
我有一个failed: "sh -c 'cd /var/www错误.然后通过在deploy.rb中添加以下内容来修复它...
set :default_environment, {
'PATH' => "/var/lib/gems/1.9.1/bin:$PATH"
}
Run Code Online (Sandbox Code Playgroud)
现在我收到了这个新错误.
** [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
Run Code Online (Sandbox Code Playgroud)
所以我用ls -lha检查了manifest.yml和production.log上的权限,是的,它们归root所有.
capistrano 部署由拥有/ var/www目录的linux用户(非root用户)完成.我猜这是因为无论创建这些文件的命令是什么,都给了他们root权限.
澄清:我知道可能只是使用root进行部署将解决问题,但我不想使用root.
您永远不应拥有Web应用程序文件root,它们应归非特权用户所有.虽然用户在Web服务器和Web服务器的设置方式之间存在差异,但用户通常是www-data(对于Apache)或nobody(对于Nginx).
要删除错误,您需要运行错误中提到的命令:
chmod 0666 /var/www/releases/20111208152807/log/production.log 将文件设置为读取每个用户的写入权限.
这些权限可能有点宽松,因此如果您觉得有必要,可以限制它们.