質問

パッセンジャーを使用して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/
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top