我的服务器上有两个用户,我自己管理的 Ubuntu 12.04 虚拟服务器:
一些目录,比如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/