2009-11-24 129 views
4

在本地,我的应用运行良好并写入其日志。未写入(乘客)的日志文件

我的生产服务器正在运行带有运行Passenger的Apache服务器的CentOS。当试图调试时,我注意到我的日志文件没有被写入。我做的第一件事是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

但是,当我填写正确的路径时,我得到:Operation not supported。

很难过......有什么想法吗?

+1

在Server Fault上可能会更好吗?这似乎更像是一个管理问题,而不是一个编程问题。 – eswald 2009-11-24 04:09:33

+0

好主意,会把它放在那里。谢谢 – asdfasdfasdfasdf 2009-11-24 04:10:24

回答

4

你的日志文件中“ls -l”的结果是什么?在Ubuntu上,我必须确保acl在日志文件上是正确的。我通常解决,通过使用

sudo chown -R deploy:deploy /path/to/app 

部署是乘客运行用户。

3

我遇到了我的Ubuntu的服务器10.x的同样的问题。这是我在排除故障时学到的。

  • 如前所述,在文档中,Passenger以config/environment.rb文件的所有者的身份运行rails ruby​​进程。除非您做了特别的事情,否则这通常与整个rails应用程序目录的所有者相同。在capistrano部署的情况下,这是capistrano用户。
  • 如果environment.rb文件是由根(很可能是因为您正在部署根)拥有客运运行轨道流程作为“没人”

可以看到哪些用户的进程运行经由top命令(或其他任何技术)。

在任何一种情况下 - 我的发生是后者 - 如果rails进程无法写入日志文件,则日志(duh)中不显示任何内容。 Rails将忽略此权限被拒绝的错误,并尝试正常处理请求。

解决方案是确保rails ruby​​进程作为拥有您的rails部署,config/environment.rb文件和日志目录和文件的相同用户运行。

这可以是depryment配置步骤,以chown问题的文件和目录或配置apache,并告诉它作为特定用户运行ruby进程(比如,根,而不是没有人)。显然是不建议作为root运行,但如果你这样做,不管是什么原因,以及需要看到铁轨原木正确写入,你可以,如果你是不是root部署中加入以下

# in /etc/apache2/apache2.conf 
PassengerDefaultUser root 

做到这一点(在另一台服务器上就是这种情况),典型的情况应该是rails app目录由非root用户拥有,乘客应该以同一用户的身份运行rails进程。一切都应该工作。

[1] http://www.modrails.com/documentation/Users%20guide%20Apache.html#_the_rails_application_reports_that_it_8217_s_unable_to_start_because_of_a_permission_error

+0

添加PassengerDefaultUser根设置为我解决了一些问题。之前,这个日志错误似乎非常神秘。谢谢!请参阅http://stackoverflow.com/questions/31373281/rails-4-cannot-access-log-file – julian 2015-07-13 21:04:56