在本地,我的应用运行良好并写入其日志。
我的生产服务器运行CentOS,运行Passenger的Apache服务器。在尝试调试时,我注意到我的日志文件没有被写入。我做的第一件事是chmod 0666他们,当我发现不起作用时,我查看了我的apache日志。我发现了这个:Rails错误:无法访问日志文件。请确保/var/www/vhosts/mysite.com/rails/exp/releases/20091124020342/log/production.log存在并且是chmod 0666.日志级别已提升为WARN,输出已定向到STDERR,直到出现问题是固定的。
(注意:我正在使用capistrano进行部署)
无论如何,我用Google搜索并发现有人说这是SELinux问题,所以我查看了乘客的文档并发现了这一点:http://www.modrails.com/documentation/Users%20guide.html#_my_rails_application_8217_s_log_file_is_not_being_written_to
基本上说这样做:chcon -R -h -t httpd_sys_content_t / path / to / your / rails / app
然而,当我填写正确的路径时,我得到:不支持操作。
非常难过......有什么想法吗?
答案 0 :(得分:4)
日志文件中“ls -l”的结果是什么?在Ubuntu上,我必须确保日志文件中的acl是正确的。我通常使用
来解决这个问题sudo chown -R deploy:deploy /path/to/app
部署是乘客所在的用户。
答案 1 :(得分:3)
我的ubuntu 10.x服务器遇到了同样的问题。这是我在排除故障时学到的。
您可以通过top命令(或任何其他技术)查看进程运行的用户。
在任何一种情况下 - 我的发生都是后者 - 如果rails进程无法写入日志文件,则日志中没有任何内容显示(duh)。 Rails将忽略此权限被拒绝错误并尝试正常处理请求。
解决方案是确保rails ruby进程以拥有rails部署,config / environment.rb文件以及logs目录和文件的用户身份运行。
这可以是deplyment配置步骤,用于chown有问题的文件和目录,或者配置apache并告诉它以特定用户(例如root而不是nobody)运行ruby进程。显然不建议以root身份运行,但如果您出于某种原因这样做,并且需要正确写入rails日志,则可以通过添加以下内容来执行此操作
# in /etc/apache2/apache2.conf
PassengerDefaultUser root
如果您没有以root身份部署(我在其他服务器上就是这种情况),典型情况应该是rails app目录由非root用户拥有,而乘客应该将rails进程作为那个用户。一切都应该奏效。