Błąd
500 server error
jest w zasadzie przykrywką na wszystkie sytuacje, w których Twój serwer ma problem wewnętrzny (i nie może renderować Twojego żądania)
Obsługa błędów Railsów kieruje wszystkie twoje błędy do serii plików wewnątrz twojego /public
katalog o nazwie 422.html
, 404.html
i 500.html
-- reprezentujące najczęstsze błędy
Przyczyną wyświetlania błędu 500 może być dowolny element Twojej aplikacji. Oto, co zrobię, aby to naprawić:
Środowisko
Otrzymujesz błąd w środowisku produkcyjnym, co oznacza, że przyczyną problemu będzie różnica w środowiskach
Zacząłbym od spojrzenia na to, co się zmienia. Zazwyczaj przyczyną problemu jest baza danych lub niektóre ustawienia środowiska (inny dostawca bazy danych itp.)
DB
Najczęstsze błędy 500 są spowodowane przez niespójności DB między środowiskami programistycznymi i produkcyjnymi. Nie wiem o mongoid, ale w przypadku MYSQL / PGSQL problem będzie związany z brakiem migracji w środowisku produkcyjnym:
heroku run rake db:migrate
zwykle naprawia większość problemów z bazą danych w produkcji
Powiadomienie o wyjątku
Istnieje bardzo dobry klejnot o nazwie powiadomienie o wyjątku (wyodrębniony z rdzenia Rails), część oprogramowania pośredniczącego, które wysyła powiadomienia o błędach przez e-mail:
#config/environments/production.rb
config.middleware.use ExceptionNotification::Rack,
:email => {
:email_prefix => "Subject",
:sender_address => %{"notifier" <[email protected]>},
:exception_recipients => %w{[email protected]}
}
Musisz pobrać dodatek SendGrid
w Heroku i dodaj to do swojego production.rb
:
#config/environments/production.rb
config.action_mailer.smtp_settings = {
:address => 'smtp.sendgrid.net',
:port => '587',
:authentication => :plain,
:user_name => ENV['SENDGRID_USERNAME'],
:password => ENV['SENDGRID_PASSWORD'],
:domain => 'heroku.com',
:enable_starttls_auto => true
}