生产日志是空白的?
Posted
技术标签:
【中文标题】生产日志是空白的?【英文标题】:Production log is blank? 【发布时间】:2014-06-17 15:11:58 【问题描述】:我的 puma 配置:
path = Dir.pwd + "/tmp/puma/"
threads 0,20
environment "production"
daemonize true
drain_on_shutdown true
bind "unix://" + path + "socket/puma.sock"
pidfile path + "pid/puma.pid"
state_path path + "pid/puma.state"
我的环境/production.rb
MyApp::Application.configure do
config.log_level = :debug
end
我启动我的服务器:
starkers@ubuntu:~/Desktop/myspp$ pumactl -F config/puma.rb start
=> Booting Puma
=> Rails 4.0.2 application starting in production on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
config.eager_load is set to nil. Please update your config/environments/*.rb files accordingly:
* development - set it to false
* test - set it to false (unless you use a tool that preloads your test environment)
* production - set it to true
Puma 2.8.2 starting...
* Min threads: 0, max threads: 16
* Environment: production
* Listening on tcp://0.0.0.0:3000
我浏览我的应用程序。我的 log/production.log 是空白的。不知道为什么?
我的应用程序中的目录访问权限为0777
。
不知道是什么原因造成的。真的需要日志(显然)。在本地和远程发生,因此与我的配置有关。但是我不确定是什么配置。 puma/ubuntu/rails 中是否有任何可能导致此问题的内容?
development.log 完美运行。
我已将 development.rb 复制粘贴到 production.rb 文件中。字面意思相同。好的?相同的 development.rb 和 production .rb 然而:RAILS_ENV=development rails s
填充 development.log
和
RAILS_ENV=production rails s
让 production.log 像金·卡戴珊的脑袋一样空空如也。
【问题讨论】:
不确定是不是错字,但文件是log/production.log
听起来更像是权限问题,只是为了测试,将 log/production.log 上的权限设置为 777,看看是否有区别。
我跑了sudo chmod 777 -R app_root
重启了服务器,但还是没有生产日志!但是,我现在确实获得了开发日志(我以前没有)
您没有包含您的配置。你应该启动服务器puma -c config/puma.rb -e production
@zishe 我设置为false,没区别。
【参考方案1】:
在配置文件末尾设置bind
:
path = Dir.pwd + "/tmp/puma/"
threads 0,20
environment "production"
daemonize true
drain_on_shutdown true
pidfile path + "pid/puma.pid"
state_path path + "pid/puma.state"
bind "unix://" + path + "socket/puma.sock"
我使用命令pumactl -F config/puma.rb start
启动服务器(我想没有区别,但无论如何)。
我建议使用#
作为路径:
pidfile "#pathpid/puma.pid"
state_path "#pathpid/puma.state"
bind "unix://#pathsocket/puma.sock"
但这是你的选择。
希望它有所帮助(对我来说,你的配置也不起作用)。
您还可以添加 Puma 日志:
stdout_redirect "#Dir.pwd/log/puma.stdout.log", "#Dir.pwd/log/puma.stderr.log"
在bind
之前添加这一行。
【讨论】:
【参考方案2】:如果您想将服务器的输出添加到日志中,最简单的方法是告诉您的系统完全这样做。运行您的服务器启动命令,例如:
pumactl -F config/puma.rb start >> log/development.log
会将服务器的每一行输出附加到开发日志中。尽管为了使调试更容易,您可能希望为每个服务器提供自己的日志,例如log/puma.log
。如果这样做,您可能希望每次启动服务器时都从头开始重写文件,而不是保留累积日志,如果是这种情况,只需将 >>
转换为 >
,例如:
pumactl -F config/puma.rb start > log/puma.log
但是,如果您将系统设置为在服务器失败时自动重新启动服务器,则使用 >
将覆盖日志以了解可能导致服务器重新启动时崩溃的原因。
同样,您可以通过以下方式启动您的 Rails 服务器来让您的 production.log
工作:
RAILS_ENV=production rails s >> log/production.log
如果您想像在生产环境中一样在后台运行服务器,可以在末尾添加一个&
字符,例如:
pumactl -F config/puma.rb start > log/puma.log &
如果您这样做,您可能希望存储进程标识符,以便稍后杀死服务器,因为^C
不适用于后台进程。要存储进程 ID,请在 lib/pids/puma.pid
之类的某个位置创建另一个空文件,然后将该 puma 服务器的进程 ID 导出到空文件,例如:
pumactl -F config/puma.rb start > log/puma.log &
echo $! > lib/pids/puma.pid
然后你就可以杀死服务器了:
kill `cat lib/pids/puma.pid`
重要的是要记住,即使您将服务器的输出附加到您的development.log
文件中,它也不会显示在您的开发 Rails 服务器的输出中。如果您想实时查看日志以进行调试,可以使用tailf
命令,例如:
tailf log/puma.log
有关命令行界面的更多信息,Command Line Crash Course 是一个很好的资源。
【讨论】:
以上是关于生产日志是空白的?的主要内容,如果未能解决你的问题,请参考以下文章