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

pup*_*eno 7 permissions capistrano ruby-on-rails

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

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

某些目录(如public/uploads)配置为属于projectx_rails:projectx_rails,因此rails应用程序可以编写上载的文件.

我的问题来到目录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.

gwc*_*fey 5

好吧,这是我的理论。显然,很难对我进行测试,因此请考虑一下。

首先:建立两个用户都属于的组。喜欢projectx_shared

第二:使该组成为tmp目录的组所有者:

chown projectx_rails:projectx_shared tmp
Run Code Online (Sandbox Code Playgroud)

第三:在此目录上设置setgid位:

chmod g+s tmp
Run Code Online (Sandbox Code Playgroud)

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

我假设在部署时,文件已经rw-rw-r--自动获得权限。如果不是,则还需要将您的UMASK设置为002 .bashrc

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