默认文件权限(Passenger、Rails、Ubuntu Server)

默认文件权限(Passenger、Rails、Ubuntu Server)

我部署了一个使用页面缓存的 Rails 应用程序,该应用程序通过 Ubuntu Server 上的 Passenger 运行。Rails 缓存仅使用 Ruby 的 File.open 来写入缓存文件。

不幸的是,这些文件是用模式 666 写入的。所有适当帐户的 umask 都是 022。我还能检查什么来确定是什么原因造成的?

提前致谢。

答案1

根据您的情况,您需要修改 Apache httpd.conf 文件以更改RailsRuby为:

RailsRuby /usr/local/bin/ruby_with_env

然后创建/usr/local/bin/ruby_with_env包含以下内容的文件:

#!/bin/bash
umask 022
/usr/bin/ruby $*

然后确保chmod 755 /usr/local/bin/ruby_with_env包装脚本是可执行的,然后告诉 Apache 重新加载其配置。

此外,这当然假设您已经在 中安装了 ruby /usr/bin​​,但是如果您将它安装在其他位置,则需要将该行更改为/path/to/ruby $*或更通用的/usr/bin/env ruby $*将在 Apache 路径中搜索 ruby​​。

题为为 rails 用户设置 umask建议类似的解决方案:

> I'd like to set umask to 002 for the user running the rails processes. 
> However, passenger ignores the value set in ~/.profile (or set in 
> environment.rb via File.umask). 

I would set it in a wrapper script that sets enviroment stuff and then
invokes ruby; use this wrapper script as the target of your 
PassengerRuby/RailsRuby parameter. See this blog post for an example:

http://blog.rayapps.com/2008/05/21/using-mod_rails-with-rails-applications-on-oracle/

答案2

我们遇到了同样的问题,问题在于我们将 Passenger 作为独立的 nginx 托管进程运行。我们将 Passenger 重新安装为系统范围的 Apache 模块(本例中为 3.0.11 版),不再存在缓存文件权限问题。

相关内容