11

乗客を使用して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エラーの原因をどのように確認できるかについてのアイデアはありますか?助けてくれてありがとう!

4

3 に答える 3

6

Rack::ShowExceptions ミドルウェアを使用して問題を追跡してみます。config.ru で、run 呼び出しの前に次の 2 行を追加します。

require 'rubygems'
require 'your-app'

use Rack::ShowExceptions

run YourApp

これにより、Rack またはアプリで発生した例外のバックトレースをキャッチして表示する必要があります。これにより、作業するための詳細が得られるはずです。少なくともそれが希望です。

于 2009-11-01T01:07:08.717 に答える
1

ログの設定に問題があるのではないでしょうか。

Sinatraサーバーの実行時にSTDERRをリダイレクトして、読み取れるようにします。好き:

ruby myapp.rb -p 1234 > log/app.log 2>&1
于 2009-10-31T18:25:05.333 に答える
0

回答ありがとうございましたが、使用する必要はありませんでした。私は元々、サブURI構成でアプリをデプロイしていました。代わりにアプリを独自のサブドメインにデプロイすると、問題は解決しました。

だから..問題が何であったかはよくわかりませんが、この行を取り除くことで、サイトのApache構成が問題を解決しました。

Redirect permanent / https://www.example.org/admin/member_photos/
于 2009-11-05T18:31:42.333 に答える