Lỗi
500 server error
về cơ bản là sự bảo vệ cho tất cả những lần máy chủ của bạn gặp sự cố nội bộ (và không thể hiển thị yêu cầu của bạn)
Xử lý lỗi của Rails định tuyến tất cả các lỗi của bạn đến một loạt các tệp bên trong /public
của bạn thư mục có tên 422.html
, 404.html
và 500.html
- đại diện cho các lỗi phổ biến nhất
Lý do bạn gặp lỗi 500 có thể là bất kỳ thứ gì bên trong ứng dụng của bạn. Đây là những gì tôi sẽ làm để khắc phục nó:
Môi trường
Bạn đang gặp lỗi trong quá trình sản xuất, có nghĩa là sự khác biệt với môi trường sẽ gây ra sự cố
Tôi sẽ bắt đầu bằng cách xem xét những gì đang thay đổi. Thông thường, đó là DB hoặc một số cài đặt môi trường (nhà cung cấp DB khác, v.v.) gây ra sự cố
DB
Hầu hết các lỗi 500 phổ biến là do DB không nhất quán giữa môi trường phát triển và sản xuất. Tôi không biết về mongoid, nhưng với những thứ như MYSQL / PGSQL, vấn đề sẽ liên quan đến việc không di chuyển trong sản xuất:
heroku run rake db:migrate
thường khắc phục hầu hết các sự cố db trong quá trình sản xuất
Thông báo ngoại lệ
Có một viên ngọc rất hay có tên là thông báo ngoại lệ (được trích xuất từ lõi Rails), một phần của phần mềm trung gian gửi thông báo lỗi qua email:
#config/environments/production.rb
config.middleware.use ExceptionNotification::Rack,
:email => {
:email_prefix => "Subject",
:sender_address => %{"notifier" <[email protected]>},
:exception_recipients => %w{[email protected]}
}
Bạn sẽ cần tải tiện ích bổ sung SendGrid
trong Heroku và thêm cái này vào production.rb
của bạn :
#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
}