【问题标题】:Rails 3.2.x - No production log entries on an ubuntu, nginx, unicorn setupRails 3.2.x - ubuntu、nginx、unicorn 设置上没有生产日志条目
【发布时间】:2013-03-02 19:43:40
【问题描述】:

在 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 按照建议发送到初始化程序,但这只是给我一个错误,表明当我尝试运行任何东西时同步为零

我在 rails v 3.2.1 和 3.2.9 遇到了同样的问题

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

【问题讨论】:

    标签: ruby-on-rails nginx unicorn


    【解决方案1】:

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

    【讨论】:

    • 我会检查一下,然后回复你。这是我唯一没有想到的事情!
    • 权限似乎没问题,我的意思是rails应用程序文件夹和文件都是nginx.conf文件中定义的同一个用户
    【解决方案2】:

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

    我正在使用最新的 unicorn gem,现在一切都很好,但请简要说明一下 unicorn 配置文件以及您可能看不到 nGinx/Unicorn 设置的生产日志条目的其他原因

    1) 如果 nGinx 无法连接到您的 Web 服务器,它可能会返回 500 错误(如果您已将 nginx 配置设置为执行此操作)。即独角兽启动失败。

    很明显,如果 unicorn 失败了,那么您的 rails 就没有运行,您将寻找不存在的 rails 日志条目。 如果是这种情况,请检查您的 unicorn 配置以查看您将 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"
    

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

    您可能会看到 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 配置中定义的 unicorn 错误日志文件以检查什么,如果任何,正在给出服务器无法启动的原因。

    【讨论】:

    • 谢谢!我的错误是由于复制/粘贴,我启动了其他子域的独角兽,检查您指向的独角兽的日志在我的情况下不存在,这就是我发现问题的原因=)
    猜你喜欢
    • 1970-01-01
    • 2015-01-18
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多