繁体   English   中英

Rails / Carrierwave / GIT / nginx / Capistrano-无法在git releases文件夹中创建目录

[英]Rails / Carrierwave / GIT / nginx / Capistrano - can't create a directory in git releases folder

我在Rails应用程序中使用carrierwave来上传文件。 它在我的开发环境上正常工作,但是在生产VM(Ubuntu)上,出现此错误:

用户#update中发生了Errno :: EACCES:

  Permission denied - /home/yards/apps/yardsapp/releases/20130616143623/public/uploads/tmp/20130616-1438-14186-3184
  /usr/local/lib/ruby/1.9.1/fileutils.rb:244:in `mkdir'

我很确定我了解发生了什么,但似乎无法找出解决办法。 我的capistrano deploy.rb是用root用户设置的。 因此,当它在部署上创建新的发行文件夹时,访问权限是针对根的(我认为)。

然后,当我尝试上传文件时,出现此错误,因为nginx试图将mkdir作为www-data执行。

我可以在部署后将文件夹扔掉,它可以工作...但是,然后另一次部署创建了另一个新目录,所有者默认设置为root。

至少我认为这是正在发生的事情。 有人对我应该如何做有任何想法吗?

作为www-data运行您的部署。 您可能还需要调整www-data用户的authorized_keys文件才能连接。

最快的方法是为当前正在使用的任何用户(假设您是root用户)复制您的authorized_keys文件:

mkdir $WWW_DATA_HOME/.ssh
cp ~/.ssh/authorized_keys $WWW_DATA_HOME/.ssh/authorized_keys
chown www-data:www-data $WWW_DATA_HOME/.ssh/authorized_keys

您可能还需要更改www-data用户的外壳程序才能登录到它:

chsh -s /bin/bash www-data

现在您应该可以

ssh www-data@your-host.tld

并登录。

这归结为Capistrano配置不当。 我正确地遵循了capistrano文档(并使其成为一个“部署者”用户,与上面建议的www-data相同),并且我使capistrano像魅力一样工作。 还升级到Capistrano 3。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM