1

我在 rails 应用程序中使用carrierwave 来上传文件。它在我的开发环境中运行良好,但在我的生产虚拟机(Ubuntu)上,我收到了这个错误:

在 users#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 用户。因此,当它在部署中创建新的发布文件夹时,访问权限是针对 root 的(我认为)。

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

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

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

4

2 回答 2

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

您可能还需要更改 shell 以供www-data用户登录:

chsh -s /bin/bash www-data

现在你应该可以做

ssh www-data@your-host.tld

并登录。

于 2013-06-16T14:57:44.970 回答
0

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

于 2014-10-08T15:36:08.763 回答