在本地,我的应用程序运行良好并写入其日志。
我的生产服务器运行的是 CentOS,Apache 服务器运行的是 Passenger。尝试调试时,我注意到我的日志文件未被写入。我做的第一件事就是对它们执行 chmod 0666 操作,当我发现这不起作用时,我查看了我的 apache 日志。我发现了以下内容:
Rails 错误:无法访问日志文件。请确保 /var/www/vhosts/mysite.com/rails/exp/releases/20091124020342/log/production.log 存在并且 chmod 为 0666。日志级别已提升至 WARN,并且输出定向到 STDERR,直到问题解决为止。
(注:我正在使用 capistrano 进行部署)
无论如何,我在 Google 上搜索了一下,发现有人说这是一个 SELinux 问题,所以我查看了 Passenger 的文档并发现了这一点:http://www.modrails.com/documentation/Users%20guide.html#%5Fmy%5Frails%5Fapplication%5F8217%5Fs%5Flog%5Ffile%5Fis%5Fnot%5Fbeing%5Fwritten%5Fto
基本上是说这样做:chcon -R -h -t httpd_sys_content_t /path/to/your/rails/app
但是,当我填写正确的路径时,我得到:Operation not supported
。
很困惑...有什么想法吗?
答案1
使用 top 检查乘客进程以哪个用户身份运行。如果我没记错的话,它不一定是 www-data/apache 用户。
答案2
我没有特别使用过 Passenger 的经验,但您可能需要检查的一件事是确保运行 apache 的用户(或负责写入日志文件的任何守护进程)具有通过您提供的整个文件路径进行 cd 所需的权限。