nginx+passenger+rails 3

187 views
Skip to first unread message

Anton Venyaev

unread,
Sep 27, 2011, 1:10:29 PM9/27/11
to ror...@googlegroups.com
Всем привет.
Друзья, подскажите плиз, в чём может заключаться такая проблема.
Поднял новый хосниг с убунтой. Поставил rvm+nginx. Запускаю приложение на рельсах=2.3.8 -- всё ок.
Запускаю приложение (скафолд тестовый сделал) на рельсах >= 3 -- получаю пустую страницу белую. Смотрю логи сервера и приложения -- ни одной ошибки. Причём в логе приложения подозрительно мало строчек (development режим):

Started GET "/posts" for хх.хх.хх.хх at Tue Sep 27 18:48:12 +0200 2011
  Processing by PostsController#index as HTML
  .[1m.[36mPost Load (0.1ms).[0m  .[1mSELECT "posts".* FROM "posts" .[0m
Rendered posts/index.html.erb within layouts/application (45.0ms)
Completed 200 OK in 63ms (Views: 62.3ms | ActiveRecord: 0.2ms)

Вот такое отдаёт сервер браузеру:

HTTP/1.1 304 Not Modified
Content-Length: 0
Connection: keep-alive
Status: 304
X-Powered-By: Phusion Passenger (mod_rails/mod_rack) 3.0.9
Etag: "5ca0cee4207d6f6eaeef9a3a65c1536c"
X-UA-Compatible: IE=Edge
X-Runtime: 0.091581
Set-Cookie: _tesapp_session=BAh7ByIQX2NzcmZfdG9rZW4iMThoenZobUVTbVBZMFZwWDl3aGVidXUxWUJNNVJDRnhCMmI1ZUhleDdLb0E9Ig9zZXNzaW9uX2lkIiUyMWYxNWQ4YzQ5ZGNjNjBlMTc0NWIwMmQ2NzM3MTE0Yw%3D%3D--94d42ea8ead7fcd3db0e6f8d0a913f23ea35fb13; path=/; HttpOnly
Cache-Control: max-age=0, private, must-revalidate
Server: nginx/1.1.4 + Phusion Passenger 3.0.9 (mod_rails/mod_rack)



Проверил все права доступа - не помогло.
Конфигурация nginx:

  passenger_root /home/username/.rvm/gems/ree-1.8.7-2011.03@main/gems/passenger-3.0.9;
  passenger_ruby /home/username/.rvm/wrappers/ree-1.8.7-2011.03@main/rub

server {
     listen 80;
     server_name mysite.com;
     root /home/apps/tesapp/public;
     passenger_enabled on;
     rails_env development;
    }

Проверял на rails-3.0.9 и rails-3.1.1.rc1
До этого на сервере была fedora - всё работало нормально (правда пассажир был 3.0.7 и nginx 1.1.0). И на ноутбуке под убунтой тоже всё работает нормально (здесь всё то же установлено, что и на сервере)

Идей у меня больше нет, в инете ничего не нарыл. Вся надежда на вас, уважаемое сообщество :)

Спасибо.

Anton Venyaev

unread,
Sep 27, 2011, 1:22:46 PM9/27/11
to ror...@googlegroups.com
Добавлю, что под монгрелом/вэбриком всё ок.

Anton Venyaev

unread,
Sep 28, 2011, 10:23:40 AM9/28/11
to ror...@googlegroups.com
Решил я свою проблему.
Случайным образом добавил в файл лэйаута строку, сохранил его и.. всё заработало! Обидно, что так и не понял, в чём проблема была. Может кто даст разумное объяснение этому?

Anton Venyaev

unread,
Sep 28, 2011, 12:48:24 PM9/28/11
to ror...@googlegroups.com
Наконец то разобрался я.
В который раз ругаю себя за то, что постоянно тянет меня заюзать самое свежее и модное. В итоге теряю кучу времени. Например, как сейчас. Оказывается проблема моя крылась в nginx - версия nginx-1.1.4 не работает с рельсами 3+ версии.
Почему на стал разбираться. Видать что то из этого списка мешает:

Изменения в nginx 1.1.4                                           20.09.2011

    *) Добавление: модуль ngx_http_upstream_keepalive.

    *) Добавление: директива proxy_http_version.

    *) Добавление: директива fastcgi_keep_conn.

    *) Добавление: директива worker_aio_requests.

    *) Исправление: если nginx был собран с файловым AIO, он не мог
       запускаться на Linux без поддержки AIO.

    *) Исправление: в обработке ошибок при работе с Linux AIO.
       Спасибо Hagai Avrahami.

    *) Исправление: уменьшено потребление памяти для долгоживущих запросов.

    *) Исправление: модуль ngx_http_mp4_module не поддерживал 64-битный
       MP4-атом co64.

Akzhan Abdulin

unread,
Sep 28, 2011, 12:49:56 PM9/28/11
to ror...@googlegroups.com
Используйте nginx + unicorn, и будет вам счастье любой свежести )

28 сентября 2011 г. 20:48 пользователь Anton Venyaev <anton....@gmail.com> написал:

--
--
Данное сообщение отправлено Вам, так как Вы являетесь подписчиком группы "RubyOnRails to russian" на группах Google.
FAQ группы находится по адресу: http://ru.wikibooks.org/wiki/RubyFAQ
 
Для того, чтобы отправить сообщение в эту группу, пошлите его по адресу
ror...@googlegroups.com
Чтобы отменить подписку на эту группу, отправьте сообщение по адресу: ror2ru-un...@googlegroups.com
Дополнительные варианты находятся на странице группы http://groups.google.com/group/ror2ru?hl=ru

Anton Venyaev

unread,
Sep 28, 2011, 12:53:20 PM9/28/11
to ror...@googlegroups.com
Используйте nginx + unicorn, и будет вам счастье любой свежести )


Это неправильный ответ ;)

Во-первых, если мне нужен passenger, то мне нужен именно он, а не что-то иное. Иначе я не стал бы терять два дня на поиск решения.
Во-вторых никто не застрахован от проблем бета-версий с любым софтом. В том числе и unicorn-ом. 

Anton Venyaev

unread,
Sep 28, 2011, 12:55:25 PM9/28/11
to ror...@googlegroups.com
Во-вторых никто не застрахован от проблем бета-версий с любым софтом. В том числе и unicorn-ом. 

Даже не так. Правильнее будет сказать: "никто не застрахован от проблем со свежими релизами".

Akzhan Abdulin

unread,
Sep 28, 2011, 12:58:23 PM9/28/11
to ror...@googlegroups.com
Это всё верно, за исключением одного: я не могу представить себе ситуации, где nginx+passenger нельзя заменить на связку nginx+unicorn, к примеру.
Неповторимой магии там нет.

28 сентября 2011 г. 20:55 пользователь Anton Venyaev <anton....@gmail.com> написал:

Во-вторых никто не застрахован от проблем бета-версий с любым софтом. В том числе и unicorn-ом. 

Даже не так. Правильнее будет сказать: "никто не застрахован от проблем со свежими релизами".

fxposter

unread,
Sep 28, 2011, 6:18:11 PM9/28/11
to RubyOnRails to russian
Подтверждаю, с 1.1.4, пасажиром и 3.1 рельсами у нас на продакшен
сервере начались глюки. Nginx иногда отдает пустые страницы на клиент,
хотя в логах приложения явно видно, что страница отдалась нормально.
Возврат на 1.1.1 проблему решил, но вообще интересно, что за фигня.
Вместе с nginx-ом обновился PCRE, возможно проблема в нем.

Зануда

unread,
Sep 29, 2011, 2:07:50 AM9/29/11
to RubyOnRails to russian

On 28 сен, 20:58, Akzhan Abdulin <akzhan.abdu...@gmail.com> wrote:
> Это всё верно, за исключением одного: я не могу представить себе ситуации,
> где nginx+passenger нельзя заменить на связку nginx+unicorn, к примеру.

Разве unicorn быстрее прорабатыват запросы нежели passenger? То с чем
я сталкивался у unicorn-а (правда голого) именно его косность, он
быстее только-лишь вебрика....

Max Lapshin

unread,
Sep 29, 2011, 3:06:20 AM9/29/11
to ror...@googlegroups.com
Не распространяйте заведомо ложную информацию по вопросам, в которых
вы не разбираетесь.

2011/9/29 Зануда <3ah...@gmail.com>:

Зануда

unread,
Sep 30, 2011, 1:48:27 AM9/30/11
to RubyOnRails to russian

On 29 сен, 11:06, Max Lapshin <max.laps...@gmail.com> wrote:
> Не распространяйте заведомо ложную информацию по вопросам, в которых
> вы не разбираетесь.

А разве там не видно вопроса?

perestoronin

unread,
Sep 30, 2011, 4:46:22 AM9/30/11
to RubyOnRails to russian
Такая же проблема. Воспроизводится на чистом тестовом приложении.

Думаю проблема в связке nginx (верси + passenger

perestoronin

unread,
Sep 30, 2011, 4:53:56 AM9/30/11
to RubyOnRails to russian
С выходом 1..1.4 проявилась такая же проблема в связке nginx версий
1.1.3..1.1.4 и passenger 3.0.9.
Решить не удалось. Интересно что какое-то время 1.1.3 работал. После
отката с 1.1.4 на 1.1.3 работоспособность не восстановилась.
Пустая страница. В логах 200 и 304. С webrick работает как часы. Может
кто сможет помочь? Почему в логах нет ошибок ?
Может проблема проявляется только для passenger 3.0.9 и обновившимися
недавно hike, rack-cash и sprockets ?
Почему тогда нет никаких ошибок в логах? Почему с webricks все
отображется, а с passenger 3.0.9 пустые страницы передаются nginx-у?
Как дебагить passenger, если он идет как mod в составе nginx ?

perestoronin

unread,
Oct 5, 2011, 2:43:06 PM10/5/11
to RubyOnRails to russian
Passenger 3.0.9 и nginx ветки 1.1.х перестали дружить. Если у кого
работает (не выдает пустых страниц) поделитесь рецептом пожалуйста.
Еще недавно 1.1.3 работал, но после обновления до 1.1.4 перестал
работать. Не заработал и с 1.1.5 недавно вышедшей, а также и при
откате обратно на 1.1.3.
Но к счастью пока устойчиво дружит с 1.0.8.

Oleksiy Kovyrin

unread,
Oct 5, 2011, 2:55:13 PM10/5/11
to ror...@googlegroups.com
Старая админская мудрость гласит: сидишь на работающей версии - сиди,
нефик обновляться если не печет :-)

2011/10/5 perestoronin <perest...@gmail.com>:

--
Oleksiy Kovyrin
http://kovyrin.net/

perestoronin

unread,
Oct 5, 2011, 3:51:40 PM10/5/11
to RubyOnRails to russian
C nginx 1.1.5 ожил passenger 3.0.9, правда из пяти методов контроллера
тестового сайта один не работает при этом - разбираюсь почему.
Также не ясно почему сразу не заработал, что-то все-таки прошло мимо
моего внимания.
На 1.1.4 повторно не пробывал, да и зачем теперь он нужен, именно на
тем впервые и возникла проблема "пустая страница".

Houdini

unread,
Oct 10, 2011, 10:41:06 AM10/10/11
to ror...@googlegroups.com
додтверждаю проблему.
nginx 1.1.5, passenger 3.0.9, FreeBSD 8.2-RC2
отдает белую страницу, согласно логам все отлично.

Правда работает под версией nginx 1.1.1, passenger 3.0.8, Darwin Kernel Version 11.1.0 (Lion)

Вячеслав Пересторонин

unread,
Oct 23, 2011, 5:21:58 PM10/23/11
to ror...@googlegroups.com
отметился здесь http://forum.nginx.org/read.php?21,217056,217130#msg-217130
и здесь http://code.google.com/p/phusion-passenger/issues/detail?id=712&colspec=ID%20Type%20Status%20Priority%20Milestone%20Stars%20Summary&start=100

Надеюсь что помогут, сейчас временно вернулся на nginx-1.1.3, с ним passenger-3.0.9 работает.
Проблема возможно в смене API у nginx с версии 1.1.4 http://mailman.nginx.org/pipermail/nginx-devel/2011-September/001217.html
Также сам сравнил через diff -ru  ветки 1.1.3 и 1.1.4, ничего такого, из-за чего могла возникнуть проблема на вскидку пока не обнаружил.

10 октября 2011 г. 18:41 пользователь Houdini <dmitri...@gmail.com> написал:

--

Вячеслав Пересторонин

unread,
Oct 29, 2011, 3:04:18 PM10/29/11
to ror...@googlegroups.com
Временное решение для запуска nginx-1.1.6 и passenger-3.0.9. Надесь может быть полезно не только нам
http://www.perestoroniny.ru/nginx-src_http_ngx_http_upstream.c._back_1.1.3.patch
Работаю над правильным решением - патчем для passenger.

24 октября 2011 г. 1:21 пользователь Вячеслав написал:
отметился здесь http://forum.nginx.org/read.php?21,217056,217130#msg-217130
и здесь http://code.google.com/p/phusion-passenger/issues/detail?id=712&colspec=ID%20Type%20Status%20Priority%20Milestone%20Stars%20Summary&start=100

Надеюсь что помогут, сейчас временно вернулся на nginx-1.1.3, с ним passenger-3.0.9 работает.
Проблема возможно в смене API у nginx с версии 1.1.4 http://mailman.nginx.org/pipermail/nginx-devel/2011-September/001217.html
Также сам сравнил через diff -ru  ветки 1.1.3 и 1.1.4, ничего такого, из-за чего могла возникнуть проблема на вскидку пока не обнаружил.

10 октября 2011 г. 18:41 пользователь Houdini  написал:
nginx-src_http_ngx_http_upstream.c._back_1.1.3.patch

Вячеслав Пересторонин

unread,
Oct 29, 2011, 5:28:37 PM10/29/11
to ror...@googlegroups.com
По совету разработчиков nginx предлагаю другое "решение" для passenger на проверку, которое у меня на тесте сейчас работает:
# cat passenger-3.0.9-contenthandler.patch
--- a/ext/nginx/ContentHandler.c.orig    2011-10-19 22:44:40.000000000 +0400
+++ b/ext/nginx/ContentHandler.c    2011-10-30 00:58:06.700129856 +0400
@@ -920,6 +920,7 @@
     }
 
     u = r->upstream;
+    u->headers_in.content_length_n = r->headers_out.content_length_n;
 
     if (rc == NGX_HTTP_SCGI_PARSE_NO_HEADER) {
         ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
@@ -984,6 +985,7 @@
     } state;
 
     u = r->upstream;
+    u->headers_in.content_length_n = r->headers_out.content_length_n;
 
     state = r->state;
 
@@ -1409,6 +1411,7 @@
     /* Setup upstream stuff and prepare sending the request to the backend. */
    
     u = ngx_pcalloc(r->pool, sizeof(ngx_http_upstream_t));
+    u->headers_in.content_length_n = r->headers_out.content_length_n;
     if (u == NULL) {
         return NGX_HTTP_INTERNAL_SERVER_ERROR;
     }

29 октября 2011 г. 23:04 пользователь Вячеслав написал:
Временное решение для запуска nginx-1.1.6 и passenger-3.0.9. Надесь может быть полезно не только нам
Работаю над правильным решением - патчем для passenger.

24 октября 2011 г. 1:21 пользователь Вячеслав написал:
отметился здесь http://forum.nginx.org/read.php?21,217056,217130#msg-217130
и здесь http://code.google.com/p/phusion-passenger/issues/detail?id=712&colspec=ID%20Type%20Status%20Priority%20Milestone%20Stars%20Summary&start=100

Надеюсь что помогут, сейчас временно вернулся на nginx-1.1.3, с ним passenger-3.0.9 работает.
Проблема возможно в смене API у nginx с версии 1.1.4 http://mailman.nginx.org/pipermail/nginx-devel/2011-September/001217.html
Также сам сравнил через diff -ru  ветки 1.1.3 и 1.1.4, ничего такого, из-за чего могла возникнуть проблема на вскидку пока не обнаружил.

10 октября 2011 г. 18:41 пользователь Houdini  написал:
додтверждаю проблему.
nginx 1.1.5, passenger 3.0.9, FreeBSD 8.2-RC2
отдает белую страницу, согласно логам все отлично.

Правда работает под версией nginx 1.1.1, passenger 3.0.8, Darwin Kernel Version 11.1.0 (Lion)

--
--
Данное сообщение отправлено Вам, так как Вы являетесь подписчиком группы "RubyOnRails to russian" на группах Google.
FAQ группы находится по адресу: http://ru.wikibooks.org/wiki/RubyFAQ
 
Для того, чтобы отправить сообщение в эту группу, пошлите его по адресу

passenger-3.0.9-contenthandler.patch
Reply all
Reply to author
Forward
0 new messages