Я прихожу из Rails в синатра, и у меня есть некоторые проблемы с использованием журнала. У меня есть приложение Sinatra, что делает это так, как при входе:Sinatra не показывает исключений в файле журнала
configure do
Logger.class_eval { alias :write :'<<' }
logger = Logger.new("log/#{settings.environment}.log")
use Rack::CommonLogger, logger
end
Все запросы регистрируется должным образом, я вижу STH нравится
127.0.0.1 - - [25/May/2013 10:34:21] "GET/HTTP/1.1" 200 30 0.0021
127.0.0.1 - - [25/May/2013 10:34:22] "GET /favicon.ico HTTP/1.1" 404 18 0.0041
внутри лог-файлов. Но я также хочу регистрировать ошибки приложения в файле журнала. Когда я запускаю свое приложение в режиме env с RACK_ENV=production rackup config.ru
, и у меня ошибка, он регистрирует только 500 http-статус, но не сама ошибка. Ошибка отображается внутри консоли. Это хорошо для развития, но не для производства. Ошибки должны появиться в файле журнала для последующей отладки.
Вот мой config.ru
require 'rubygems'
require 'bundler'
Bundler.require(:default, ENV['RACK_ENV'].to_sym)
disable :run
Encoding.default_external = Encoding::UTF_8
use Rack::ShowExceptions
use Rack::Session::Pool
require File.expand_path '../app.rb', __FILE__
run App
И это мой app.rb
class App < Sinatra::Base
configure do
set :public_folder, Proc.new { File.join(root, "public") }
Logger.class_eval { alias :write :'<<' }
logger = Logger.new("log/#{settings.environment}.log")
use Rack::CommonLogger, logger
end
get '/' do
raise "ERROR"
erb :home, layout: :layout
end
end
Я играл с enable :logging, :dump_errors, :raise_errors
внутри configure do
блока, но это не имеет ничего. Это потому, что я использую синатра в качестве модульного приложения? Внутри маршрута get "/"
я могу получить доступ к переменным, установленным внутри блока configure.
Значит, любая идея, какова лучшая практика, регистрировать ошибки в файле с помощью синатра?
Помните, что _reopening_ 'STDOUT' заставит Пассажира прекратить работу:/https://github.com/phusion/passenger/wiki/Debugging-application-startup-problems#stdout-redirection – fguillen