Redmine 2.3,ruby 2.0.0,nginx 1.4.1,乘客4.0.2所有HTTP POST都失败

时间:2013-05-08 14:46:31

标签: ruby nginx passenger redmine scgi

我是nginx的新手,我正在尝试使用ruby 2.0.0,phusion passenger 4.0.2和nginx 1.4.1运行Redmine 2.3。这是使用Arch Linux ARM中的ARMv5te系统上的passenger-install-nginx脚本编译的。

我在nginx日志中获得以下内容: (注意:我已从日志/配置中删除了服务器名称)

2013/05/08 23:41:12 [notice] 1359#0: signal process started
[ 2013-05-08 23:41:13.1325 1367/b6f9a000 agents/HelperAgent/Main.cpp:554 ]: PassengerHelperAgent online, listening at unix:/tmp/passenger.1.0.1363/generation-0/request.socket
[ 2013-05-08 23:41:13.2641 1387/b6f26000 agents/HelperAgent/Main.cpp:554 ]: PassengerHelperAgent online, listening at unix:/tmp/passenger.1.0.1381/generation-0/request.socket
[ 2013-05-08 23:41:13.3028 1392/b6faa000 agents/LoggingAgent/Main.cpp:272 ]: PassengerLoggingAgent online, listening at unix:/tmp/passenger.1.0.1381/generation-0/logging.socket
[ 2013-05-08 23:41:15.9700 1387/b59ff450 Pool2/Spawner.h:739 ]: [App 1408 stdout] 
[ 2013-05-08 23:41:43.5820 1387/b6b4a450 Pool2/Spawner.h:159 ]: [App 1408 stderr] /var/www/sites/public-redmine-2.3/lib/SVG/Graph/Graph.rb:3: warning: class variable access from 
toplevel
[ 2013-05-08 23:41:55.8491 1387/b59ff450 Pool2/Spawner.h:739 ]: [App 1439 stdout] 
[ 2013-05-08 23:44:15.2842 1387/b57ff450 agents/HelperAgent/RequestHandler.h:581 ]: [Client 20] Disconnecting with error: invalid SCGI header
2013/05/08 23:44:15 [error] 1402#0: *3 upstream prematurely closed connection while reading response header from upstream, client: 192.168.4.254, server: (removed), request: "POST /login HTTP/1.1", upstream: "passenger:/tmp/passenger.1.0.1381/generation-0/request.socket:", host: "(removed)", referrer: "http://(removed)/login"

每当我在redmine的任何页面上执行HTTP POST时,都会始终出现最后一个错误。 HTTP GET请求适用于呈现的页面。

nginx.conf

worker_processes  2;

events {
    worker_connections  1024;
}


http {
    passenger_root /usr/lib/ruby/gems/2.0.0/gems/passenger-4.0.2;
    passenger_ruby /usr/bin/ruby;

    passenger_max_pool_size  2;
    passenger_pool_idle_time 120;
    passenger_pre_start http://(removed)/;
    passenger_spawn_method smart;


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

    sendfile        on;

    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }    
    }

    include sites-enabled/*.conf;
}

启用位点-/ redmine.conf

server {
    listen *:80;
    server_name (removed);

    passenger_enabled on;
    rails_env production;

    passenger_spawn_method conservative;

    root /var/www/sites/kamikaze-kb/public;

    location /plugin_assets/ {
        root /var/www/sites/kamikaze-kb/public/plugin_assets/;
    }
}

有一件事可能是相关的 - 如果我使用内置的ruby webrick服务器,我可以运行redmine,所以我猜这可能是一个nginx /乘客问题。有谁知道这个问题是什么?

5 个答案:

答案 0 :(得分:0)

看起来这个问题与arm平台有关。

我在手臂上遇到了同样的问题,但是相同的代码和配置在x86上工作正常。

答案 1 :(得分:0)

有同样的问题。乘客说:

[Client 20] New client accepted; new client count = 1
[Client 20] Disconnecting with error: invalid SCGI header
[Client 20] Disconnected; new client count = 0

但我的一个朋友使用相同的系统(raspberry pi)没有问题。 比较已安装的软件包,我们发现唯一的差异是Passenger的版本。

4.0.10 vs 3.0.19。

sudo gem remove passenger -v "=4.0.10"
sudo gem install passenger -v "=3.0.19"
sudo passenger-install-nginx-module

宝石降级并与乘客重建nginx后问题解决了。 POST请求不会脱落并正常工作。

答案 2 :(得分:0)

可能是Passenger ContentHandler.c中的一个错误,在off_t值上执行“%ui”转换。 简而言之,找到行

b->last = ngx_snprintf(b->last, 10, "%ui", r->headers_in.content_length_n);
在ContentHandler.c中

并将其替换为

b->last = ngx_snprintf(b->last, 10, "%O", r->headers_in.content_length_n);

此处有更多详情:

https://github.com/phusion/passenger/issues/1151

答案 3 :(得分:-1)

在Apache中,您必须设置ruby和passengee配置,如本文所述http://www.redmine.org/projects/redmine/wiki/HowTo_Install_Redmine_on_Debian_with_Ruby-on-Rails_and_Apache2-Passenger

如果您没有在帖子上收到服务器错误。我可以想象你必须在你的nginx中设置类似的东西

答案 4 :(得分:-1)

这些天没有

gem remove

只需安装3 0 19

并在

之后检查版本
passenger --version

好的 - 看起来我们必须删除v 4

gem uninstall ....

pas --ver

现在是v 3