作为部署过程的一部分,我将在所有 /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,所以为了让它工作我需要改进 www-data 的 shell 环境。那是要走的路吗?我应该注意任何副作用吗?
这取决于您用来运行 Rails 的用户。根据最佳安全实践,这应该是与 www-data 不同的用户(这是基于 debian 的系统用于 apache/nginx 拥有的文件的用户)。www-data 应该只拥有您在静态目录中导出的内容。
也就是说,如果您生成的文件是静态的(例如缩略图)并且您从 /etc/profile.d/rvm.sh 获取 rvm,您可以尝试运行以下命令:
这将以 www-data 的形式运行命令,立即启动登录 bash shell(这意味着 /etc/profile.d/rvm.sh 已加载),然后使用指定的 gemset 和命令运行 rvm。
请记住将您的代码托管在 Web 服务器的文档根目录之外!