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

时间:2013-06-16 14:56:36

标签: ruby-on-rails git nginx capistrano carrierwave

我在rails应用程序中使用carrierwave来上传文件。它在我的开发环境中工作正常,但在我的生产VM(Ubuntu)上,我收到了这个错误:

Errno :: EACCES发生在用户#update:

  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用户身份设置的。因此,当它在部署上创建新的发布文件夹时,访问权限适用于root(我认为)。

然后,当我尝试上传文件时,我收到该错误,因为nginx正在尝试将mkdir作为www-data执行。

我可以在部署之后chown该文件夹并且它可以工作......但是另一个部署会创建另一个新目录,并将所有者设置为root默认。

至少我认为这是正在发生的事情。有没有人对我应该怎么做?

2 个答案:

答案 0 :(得分:2)

www-data运行您的部署。您可能需要调整authorized_keys用户的www-data文件以便能够进行连接。

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

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用户的shell以登录它:

chsh -s /bin/bash www-data

现在你应该能够做到

ssh www-data@your-host.tld

并登录。

答案 1 :(得分:0)

这归结为一种不正确的Capistrano配置。我正确地遵循了capistrano文档(并且创建了一个'deployer'用户,与上面建议的www-data相同)我和capistrano一样工作就像一个魅力。也升级到Capistrano 3。