簡體   English   中英

Rails 4子域不適用於生產

[英]Rails 4 subdomains does not work on production

我創建了一個包含3個子域的Rails 4應用程序。

開發領域:

  • mydomain.dev
  • api.mydomain.dev
  • account.mydomain.dev

生產域(Ngnix with Passenger):

  • app.mydomain.com(www.mydomain.com和mydomain.com顯示其他頁面,而不是應用程序)
  • api.mydomain.com
  • account.mydomain.com

我的config / routes.rb看起來像這樣:

Rails.application.routes.draw do
    namespace :api, constraints: { subdomain: 'api' }, path: '/', defaults: { format: :json } do
        namespace :v1 do
            resources :clients, only: [:create, :show]
        end
    end

    namespace :account, constraints: { subdomain: 'account' }, path: '/' do
        get '/:locale' => 'welcome#index', locale: /en|pt/
        root 'welcome#index'

        scope "(:locale)", locale: /en|pt/ do
            get :sign_in, to: 'sessions#new'
            post :sign_in, to: 'sessions#create'
        end
    end

    get '/:locale' => 'welcome#index', locale: /en|pt/
    root 'welcome#index'

    scope "(:locale)", locale: /en|pt/ do
        resource :session, only: [:new, :create, :destroy]
        get :login, to: 'sessions#new', as: :login
    end
end

我的ngnix虛擬主機文件:

server {
    listen 80;
    listen [::]:80;

    # SSL configuration
    #
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name mydomain.com api.mydomain.com account.mydomain.com;

    passenger_enabled on;
    passenger_ruby /home/username/.rvm/gems/ruby-2.2.2@myapp/wrappers/ruby;

    root /var/sites/mydomain.com/current/public;

    ssl on;
    ssl_certificate /etc/nginx/ssl/mydomain.com/server.crt;
    ssl_certificate_key /etc/nginx/ssl/mydomain.com/server.key;
}

問題是,在我的開發機器(localhost)或開發環境中,它的工作非常好,正如我想的那樣。 但在生產中我得到了錯誤:“ The page you were looking for doesn't exist. ”,使用此日志信息:

訪問: https//account.mydomain.com/en/sign_in

I,[2015-07-29T11:31:07.197635#25813] INFO - :在2015-07-29 11:31:07 +0100 F,[2015-07]開始GET“/ en / sign_in”0.0.0.0 -29T11:31:07.206758#25813]致命 - :ActionController :: RoutingError(無路由匹配[GET]“/ en / sign_in”):actionpack(4.2.3)lib / action_dispatch / middleware / debug_exceptions.rb:21:在call'
newrelic_rpm (3.12.1.298) lib/new_relic/agent/instrumentation/middleware_tracing.rb:67:in
call'
newrelic_rpm (3.12.1.298) lib/new_relic/agent/instrumentation/middleware_tracing.rb:67:in
call'
newrelic_rpm (3.12.1.298) lib/new_relic/agent/instrumentation/middleware_tracing.rb:67:in
調用'actionpack(4.2.3)lib / action_dispatch / middleware / show_exceptions.rb:30:in call'
newrelic_rpm (3.12.1.298) lib/new_relic/agent/instrumentation/middleware_tracing.rb:67:in
call'
newrelic_rpm (3.12.1.298) lib/new_relic/agent/instrumentation/middleware_tracing.rb:67:in
call'
newrelic_rpm (3.12.1.298) lib/new_relic/agent/instrumentation/middleware_tracing.rb:67:in
調用'railties(4.2.3)lib / rails / rack / logger.rb:38:在call_app' railties (4.2.3) lib/rails/rack/logger.rb:20:in block in call'

在其他作品中,account.mydomain.com和api.mydomain.com仍然充當我的主域“mydomain.com”(作為同一個域)。

更新:

我在我的頁面上添加了這個代碼:

<%= request.domain.inspect %><br>
<%= request.subdomain.inspect %>

訪問: http//api.mydomain.co.ao結果我得到了:

作為域名:“co.ao”

作為子域名:“api.mydomain”

但我的子域名只有:api

怎么了?

默認

tld_length = 1

您需要將tld_length更新為2,例如:co.in,co.au

嘗試:

config.action_dispatch.tld_length = 2

在config / enviroments / production.rb中

參考

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM