Rails 3.2.x - 在ubuntu,nginx,unicorn设置上没有生产日志条目

时间:2012-12-11 18:48:06

标签: ruby-on-rails nginx unicorn

在ubuntu,nginx,unicorn设置中,我看到的唯一生产日志条目来自命令行命令,例如部署和迁移。我根本没有从网站活动中获得任何条目。

我已阅读此错误报告https://github.com/rails/rails/issues/4277#commit-ref-b332877,我尝试添加

Rails.logger.instance_variable_get(:@logger).instance_variable_get(:@log_dest).sync = true if Rails.logger 按照建议添加到初始化程序,但只是在我尝试运行任何内容时,只是给出了一个错误,表明同步为nil

我在rails v 3.2.1和3.2.9

上遇到了同样的问题

如何获取日志输出的任何想法?

2 个答案:

答案 0 :(得分:2)

只是一个猜测。您的ruby服务器是否可能在没有写入权限的用户下运行以记录该文件?检查服务器控制台(如果可用)以获取警告。

答案 1 :(得分:2)

终于解决了这个问题 首先,我相信(我可能是错的,并且有待纠正),在提出这个问题时,独角兽宝石中存在错误意味着日志条目没有被刷新,请参阅此报告以获取有关此特定问题的更多信息https://github.com/rails/rails/issues/4277

我正在使用最新的独角兽宝石,现在一切都很好但是关于unicorn配置文件的快速说明以及为什么你可能看不到nGinx / Unicorn设置的生产日志条目的其他原因

1)如果无法连接到您的Web服务器,nGinx可以返回500错误(如果您设置了nginx配置)。即独角兽未能启动。

显然,如果unicorn失败,那么你的rails没有运行,你将搜索那些不存在的rails日志条目。 如果是这种情况,那么检查unicorn配置以查看您正在编写独角兽错误的位置。我的unicorn.rb文件看起来与此类似

root = "/home/some_user/some_app/current"
pid "#{root}/tmp/pids/unicorn.pid"
stderr_path "#{root}/log/unicorn.log"
stdout_path "#{root}/log/unicorn.log"

请注意,我将错误和正常的unicorn日志条目都指向同一个日志文件。标准是使用不同的日志文件,但我发现只有一个独角兽日志文件需要查看更简单。

您可能看到500个错误页面而不是您的Web服务器未运行时通常会看到的错误网关错误的原因是您可能将nginx.conf文件设置为从您的应用程序提供静态错误页面,所以你可能有这样的东西

server {
  listen 80;
  server_name my_domain_name.com;
  root /path_to_my_app_root/current/public;

  location ^~ /assets/ {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }

  try_files $uri/index.html $uri @unicorn;
  location @unicorn {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://ff1;
  }

  error_page 500 502 503 504 /500.html;
  client_max_body_size 4G;
  keepalive_timeout 10;
}

如果您的服务器未运行,error_page 500 502 503 504 /500.html;行告诉nginx为您的应用提供静态500.html页面而不是错误的网关nginx页面。这很酷但如果您没有考虑到rails 500页面不一定会为您提供生产日志条目,那就太令人困惑了。

总结一下。如果您看到您的应用程序500.html页面,并且您在production.log中没有看到任何条目来帮助您追踪问题,请记住检查unicorn.rb配置中定义的独角兽错误日志文件,以检查是什么,如果任何原因都是服务器无法启动的原因。