在服务器上运行与Rails相关的命令时不会中断权限

作为我的部署过程的一部分,我将在所有/ var / www / projectx中运行chown -R www-data:www-data。 这是太长了,所以不是定期修改权限,我想避免打破它们。

我认为他们被打破的原因之一是因为我们在服务器上运行Rails相关的命令,如:

rvm 1.9.3@projectx && RAILS_ENV=production rake regenerate_thumbnails rvm 1.9.3@projectx && RAILS_ENV=production bundle exec rails console 

在这些命令中生成的所有文件最终都由运行它的用户所拥有,而不是www-data。

什么是适当的解决这个问题? 我认为sudoing作为www-data然后运行命令,但rvm需要bash和www-data目前使用普通的旧sh没有configuration文件,所以要使其工作,我需要改善万维网数据的shell环境。 这是要走的路吗? 任何副作用,我应该小心?

这取决于你用来运行Rails的用户。 通过安全的最佳实践,这应该是一个不同于www-data(这是基于用户debian的系统用于apache / nginx拥有文件)的用户。 www-data应该只拥有你在静态目录中导出的内容。

也就是说,如果您生成的文件是静态的(如缩略图),并且您正在从/etc/profile.d/rvm.sh获取rvm,则可以尝试运行以下命令:

 sudo -u www-data bash -l -c 'rvm 1.9.3@projectx && RAILS_ENV=production rake regenerate_thumbnails' 

这将以www-data的forms运行命令,立即启动一个loginbash shell(这意味着/etc/profile.d/rvm.sh被加载),然后用你指定的gemset和命令运行rvm。

请记住将代码托pipe在Web服务器的docroot之外!