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.