ruby-on-rails - 当部署用户与运行用户不同时处理 Ruby on Rails 项目中的 shared/tmp

标签 ruby-on-rails permissions capistrano

我的服务器上有两个用户,我自己管理的 Ubuntu 12.04 虚拟服务器:

  • projectx 用于部署应用程序,是/var/www/projectx
  • 中大多数文件的用户/组
  • projectx_rails,它用于运行 Rails 应用程序。这样,正在运行的 rails 应用程序就无权修改源代码。

  • 一些目录,比如public/uploads,被配置为属于projectx_rails:projectx_rails,这样rails app就可以写入上传的文件了。

    我的问题出在目录 tmp 上。该目录位于/var/www/projectx/shared 并以通常的 capistrano 处理发行版的方式链接到每个发行版。问题在于,在部署过程中创建的某些文件无法被正在运行的 rails 应用程序写入,并且由 rails 应用程序创建的文件在部署过程中无法写入。

    有没有办法处理这个问题?让那里的所有文件都属于 projectx_rails:projectx_rails 并且可以分组写入就足够了,但我不确定如何触发它。

    我正在使用:Capistrano 3、Rails 3.2、Ruby 2.1.2、Unicorn 4.8.3、nginx。

    最佳答案

    嗯,这是我的理论。显然很难在我的一端进行测试,因此请考虑猜想。

    第一:创建一个两个用户都属于的组。赞 projectx_shared .

    第二:将此群组设为 tmp 的群组所有者目录:

    chown projectx_rails:projectx_shared tmp
    

    第三:在此目录上设置 setgid 位:
    chmod g+s tmp
    

    现在,文件的组所有者添加到 tmp应设置为 projectx_shared自动地。我认为这也适用于 capistrano 任务。

    我假设当您部署时,文件已经获得 rw-rw-r--权限自动。如果没有,您需要将 UMASK 设置为 002,例如.bashrc以及。

    让我知道它是否有效...

    关于ruby-on-rails - 当部署用户与运行用户不同时处理 Ruby on Rails 项目中的 shared/tmp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23886211/

    相关文章:

    android - 使用 adb 授予/撤销权限

    ruby-on-rails - Rescue_from用于javascript请求

    ruby-on-rails - Papaerclip 不适用于更新方法

    ios - API图像文件上传iPhone到Ruby on Rails

    android - Google Account Authenticator 在运行时请求权限

    C# 设置项目输出自动以管理权限启动

    ruby-on-rails - 设计/用户/确认路线

    ruby-on-rails - 样式表或 JavaScript 文件的 Rails 404 错误

    ruby-on-rails - 部署期间预编译 Assets 失败

    ruby-on-rails - 橡胶无法用于Rails AWS部署