Passar em passenger_base_uri para o aplicativo Rails

1

Criamos um aplicativo do Rails que consiste nas seguintes rotas:

namespace :api do
    namespace :v1 do                  
      resources ...
    end
end

Isso significa que todos os controladores podem ser acessados via www.url.com/api/v1/controller . Para executar um aplicativo da web independente no domínio raiz, tenho a seguinte configuração nginx local:

server {
    listen       8080;
    server_name  localhost;

    location / {
        root   /Users/swramba/Sites;
        index  index.html index.htm;
    }

    location ~ /api {
        proxy_pass http://127.0.0.1:3000;
    }
}

Isso significa que tudo abaixo de /api fica proxied no servidor WEBrick usado para desenvolvimento. Agora, em nosso ambiente de produção, queríamos usar o Phusion Passenger com uma configuração semelhante. Então, eu escrevi a seguinte configuração para o nginx de produção:

server {
    listen       80;
    server_name  localhost;

    root /home/someuser/sites/web/www.myapp.com;

    passenger_base_uri /api;
    passenger_enabled on;
    rails_env production;
}

Mas, isso significa que a parte /api é removida da URL e o Rails retorna 404, pois /v1/something não pode ser encontrado.

Como posso fazer o nginx ou o Passenger não omitir o /api do URL, para que o URL seja o mesmo que no desenvolvimento?

Eu também tentei definir config.relative_url_root = "/api" , mas isso não teve nenhum efeito.

    
por Sebastian Wramba 16.03.2013 / 20:04

1 resposta

1

Eu poderia descobrir isso. Esta é realmente a configuração correta:

server {
    listen       80;
    server_name  localhost;

    location / {
        root path/to/some_html_webapp;
    }

    location ~ /api {
        root path/to/rails_app/public;
        passenger_enabled on;
        rails_env production;
    }

}

Desta forma, o URL não é modificado, mas o Passageiro assume um determinado caminho.

    
por 16.03.2013 / 21:56