2013-05-17 2 views
5

У меня есть приложение Rails, работающее на nginx 1.2.0 и пассажире 3.0.7. Я хотел бы, чтобы пользовательские страницы ошибок в приложении rails (например, /rail_app/public/500.html) отображались, когда в приложении появляется соответствующая ошибка http.rails app on nginx + пассажир, не показывающий страницы пользовательских ошибок

Вот мой текущий файл конфигурации Nginx:

http { 
    passenger_root /usr/lib/ruby/gems/1.8/gems/passenger-3.0.7; 
    passenger_ruby /usr/bin/ruby; 

    include  mime.types; 
    default_type application/octet-stream; 

    #access_log /opt/nginx/logs/access.log main; 

    sendfile  on; 
    #tcp_nopush  on; 

    server { 
     listen 80; 
     server_name localhost; 
     root /var/www/dashboard/current/public; 
     passenger_enabled on; 
     passenger_min_instances 1; 
#  listen 443; 
#  ssl on; 
#  ssl_certificate /opt/nginx/conf/server.crt; 
#  ssl_certificate_key /opt/nginx/conf/server.key; 
     error_page 500 502 503 504 /500.html; 
     location = /500.html { 
      root /var/www/dashboard/current/public/; 
     } 
    } 
} 

Эта конфигурация не отображается страница ошибки клиента рельсы приложение, а просто отправляет код состояния ошибки HTTP клиенту.

Кто-нибудь знает, что нужно, чтобы nginx/пассажир отправил пользовательскую страницу ошибки rails для клиента с кодом состояния ошибки HTTP?

ответ

0

Конфигурационного я использую:

error_page 500 502 503 504 /50x.html; 

location = /50x.html { 
    root html; 
} 
+0

Benjamin, спасибо для ответа. Я пробовал, и это не сработало. Вот несколько подробностей о том, чего я пытаюсь выполнить: когда база данных не работает ... Я хочу, чтобы приложение rails отображало пользовательскую страницу с ошибкой 500 вместо того, чтобы просто отправлять http 500 клиенту. Может быть, я должен поймать исключение activerecord? просто не уверен, как. – Rafael

+0

Ошибка в журнале prod: '/! \ FAILSAFE /! \ Fri Jun 14 10:29:18 -0400 2013 Состояние: 500 Внутренняя ошибка сервера Не удается подключиться к серверу MySQL на '169.254.1.51' (113) /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.17/lib/active_record/connection_adapters/mysql_adapter.rb:620:in 'real_connect'' – Rafael

1

Пожалуйста, попробуйте следующее:

# We use the x just because it is for all 5xx errors. 
error_page 500 502 503 504 /5xx.html; 
location = /5xx.html { 
    alias /var/www/dashboard/current/public/; 
} 

Перенастройка root директивы не имеет никакого смысла, так как он уже установлен на путь, указанные ранее. alias гарантирует, что конкретное местоположение внутренне согласовано с другим местом в файловой системе. Все входящие параметры запроса должны передаваться вместе, и если ваше приложение Rails заботится о вещах на этом этапе, оно должно ответить. Просто убедитесь, что ваше приложение Rails не отвечает снова с состоянием 500 (я не знаю, что будет потом).

Ссылки по теме

1

Вы, вероятно, отсутствует passenger_intercept_errors on; в вашем Nginx конфигурации

см passenger docs этой директивы для получения дополнительной информации

Смежные вопросы