実稼働環境でSinatraアプリのデバッグに問題がある
質問
パッセンジャーを使用してSinatraアプリを展開しています。デプロイされたアプリは機能していますが、完全ではありません。一部のパスは正常に機能し、他のパスは単に空白のページをレンダリングします。動作するルートと動作しないルートの大きな違いを見つけることはできないようです。エラーを追跡することもできません。
ハンドラー
not_foundハンドラーとエラーハンドラーを次のように定義しました。
not_found do
'404. Bummer!'
end
error do
'Nasty error: ' + env['sinatra.error'].name
end
これらは、開発および本番の両方でローカルマシンで正常に機能しますが、サーバー上でこれらが表示されることはありません。
Apacheログ
Apacheのaccess.logをテールし、壊れたパスの1つにヒットすると、500が表示されます:
helpers [27/Oct/2009:15:54:59 -0400] "GET /admin/member_photos/photos HTTP/1.1" 500 20 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3"
rack_hoptoad
config.ruにミドルウェア rack_hoptoad もインストールおよび構成しましたが、例外はありません。 hoptoadへ。
# Send exceptions to hoptoad
require 'rack_hoptoad'
use Rack::HoptoadNotifier, 'MY_API_KEY'
ロギング
このようにロギングを設定しました。
set :raise_errors => true
set :logging, true
log = File.new("log/sinatra.log", "a+")
STDOUT.reopen(log)
STDERR.reopen(log)
require 'logger'
configure do
LOGGER = Logger.new("log/sinatra.log")
end
helpers do
def logger
LOGGER
end
end
この設定により、ルート内で logger.info を呼び出すことができます。これはローカルおよびサーバー上で動作中のルート用に機能しますが、壊れたパスではlogger.infoを呼び出すのに十分ではありません。
対処方法
500エラーの原因を確認する方法についてのアイデアはありますか?助けてくれてありがとう!
解決
Rack :: ShowExceptionsミドルウェアを使用して、問題の追跡を試みます。 config.ruで、実行呼び出しの前に次の2行を追加します。
require 'rubygems'
require 'your-app'
use Rack::ShowExceptions
run YourApp
Rackまたはアプリで発生した例外のバックトレースをキャッチして表示する必要があります。これにより、作業の詳細が得られるはずです。少なくともそれが希望です。
他のヒント
ログの設定に何か問題があるのでしょうか?
Sinatraサーバーの実行時にSTDERRをリダイレクトして、読み取りできるようにします。いいね:
ruby myapp.rb -p 1234 > log/app.log 2>&1
回答に感謝しますが、私はそれらを使用する必要がなくなりました。私はもともとアプリを sub-URI構成でデプロイしていました。代わりにアプリを独自のサブドメインにデプロイすると、問題はなくなりました。
だから..私は問題が何だったのか本当に分かりませんが、この行を取り除くことは、サイトの私のApache設定が問題を解決したことです:
Redirect permanent / https://www.example.org/admin/member_photos/