【问题标题】:Rails / Carrierwave / GIT / nginx / Capistrano - can't create a directory in git releases folderRails / Carrierwave / GIT / nginx / Capistrano - 无法在 git 发布文件夹中创建目录
【发布时间】:2013-06-16 14:56:36
【问题描述】:

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

一个 Errno::EACCES 发生在 users#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。

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

【问题讨论】:

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


    【解决方案1】:

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

    最快的方法是为您目前使用的任何用户复制您的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
    

    然后登录。

    【讨论】:

    • 我想你就在这里。但是,我不太确定如何调整我的 authorized_keys 文件。对此有任何见解吗?它试图部署为 www-data 并要求我输入密码(我认为 www-data 没有密码?)
    • 在上面添加了一些信息——本质上,你需要 ssh 进入服务器,并用另一个帐户更改东西。之后,您将能够以www-data 的身份登录。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-12
      • 1970-01-01
      相关资源
      最近更新 更多