【问题标题】:How to access console (stdout) of a Rails app when starting nginx with Passenger and Rails app?使用Passenger和Rails应用程序启动nginx时如何访问Rails应用程序的控制台(stdout)?
【发布时间】:2013-10-16 02:46:47
【问题描述】:

我使用 Phusion Passenger 来运行 Rails 应用程序。我在 nginx 目录中有一个配置文件,所以当我重新启动 nginx 时,我的 Rails 应用程序正在运行。

但是,我的应用程序有一些问题,所以我想查看控制台的错误输出。如果我在 Rails 应用程序目录中使用明确的 passenger start 命令运行 Rails 应用程序,则不会发生错误。

所以当 Rails 应用程序与 nginx 一起运行时,我需要从控制台获取实时输出。

问题是:Rails 公共目录(即./public/downloads/...)内的我的下载目录中没有写入任何文件。我使用以下方式编写文件:

open(file_path, 'wb') do |file| 
 ...
 file << open(url)
 ...
end

如果有人知道为什么在不使用 passenger start 而是使用 sudo /opt/nginx/sbin/nginx -s reload 运行时会发生错误,那么了解原因会很棒。

更新:

我看到它正在写信给log/passenger.3000.log。但是是否可以在连接乘客时将某些终端直接连接到应用程序?

更新 2:

错了!当我使用passenger start 启动应用程序时,log/passenger.3000.log 将被写入。但log/development.log 是我搜索的那个。并且可以使用tail -f log/development.logwatch tail log/development.log 观看文件

【问题讨论】:

  • 它不会写入 Rails 记录器吗?
  • 确实如此,但偶尔我会使用puts 进行所有日志记录(是的,真丢脸……)现在我需要控制台来查看应用程序的运行情况。如何实时显示日志文件?
  • 实时查看日志文件:进入生产服务器上的app文件夹并执行tail -f log/production.log。在 apache 中,应用程序中的 put 记录在 apache 的 error.log 文件中的 /var/log/apache/ 文件夹中。检查一下nginx
  • 我已经尝试过了(也可以在 SO 上找到)。但它不会更新文件...

标签: ruby-on-rails ruby nginx console bundler


【解决方案1】:

您可以通过转到生产服务器上的应用文件夹并执行tail -f log/production.log来实时查看日志文件。

您也可以按照here的建议覆盖生产环境文件中应用程序的stdout

std_out = File.new(RAILS_ROOT + "/log/stdout.log","a")
$stdout.reopen(std_out)

【讨论】:

    【解决方案2】:

    乘客将日志条目(包括应用程序的输出)发送到 Web 服务器的日志文件。

    例如,对于 Nginx,这是全局 Nginx 错误日志文件。您可以改为使用passenger_log_file 指令将Passenger 配置为将日志输出发送到特定文件。

    更多信息:https://www.phusionpassenger.com/library/admin/nginx/log_file/

    您可以使用 Nginx 的 error_log 指令设置此输出的目的地。它可以直接发送到远程系统日志服务器,例如 Papertrail 的。

    【讨论】:

      猜你喜欢
      • 2013-10-31
      • 2019-04-12
      • 2016-06-21
      • 1970-01-01
      • 1970-01-01
      • 2012-10-16
      • 2020-06-06
      • 1970-01-01
      • 2022-01-16
      相关资源
      最近更新 更多