Rails API路由问题(仅限nginx + unicorn生产)

时间:2014-11-03 22:57:21

标签: ruby-on-rails-4 nginx unicorn

我用rails开发了一个api,在localhost中一切都很好。 但是当我的api在prod服务器上时,我的路线出错......

这是场景:

  • 我的prod服务器配置了nginx和unicorn
  • 我在路线中使用子域和版本(api.servername / v1 / resource)

routes.rb文件:

constraints subdomain: 'api' do
  scope module: 'api' do
    namespace :v1 do

      resources :tests, param: :name do
        member do
          get 'perform'
        end
      end
      resources :jobs

    end
  end
end

nginx conf文件:

server {
  listen 80;
  server_name *.server.com.br;

  # Application root, as defined previously
  root rails_public_path;

  try_files $uri/index.html $uri @app;

  location @app {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://appname;
    proxy_connect_timeout 1800;
    proxy_read_timeout 1800;
  }}

当我在prod中运行rake routes时,我的路线就在那里,但是独角兽会返回404页面。

1 个答案:

答案 0 :(得分:2)

这似乎是TLD问题。它不仅适用于Unicorn。 如果您使用相同的域配置/ etc / hosts,则会收到相同的错误。

删除routes.rb中子域的约束按预期工作。

routes.rb文件:

# constraints subdomain: 'api' do
scope module: 'api' do
  namespace :v1 do
    resources :tests, param: :name do
      member do
        get 'perform'
      end
    end
    resources :jobs
  end
end
# end