加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails 4子域不适用于生产

发布时间:2020-12-17 03:49:44 所属栏目:百科 来源:网络整理
导读:我创建了一个包含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.myd
我创建了一个包含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)或开发环境中,它的工作非常好,正如我想的那样.但在生产中我得到了错误:“您正在寻找的页面不存在.”,使用此日志信息:

参观:https://account.mydomain.com/en/sign_in

I,[2015-07-29T11:31:07.197635 #25813] INFO — : Started GET
“/en/sign_in” for 0.0.0.0 at 2015-07-29 11:31:07 +0100 F,
[2015-07-29T11:31:07.206758 #25813] FATAL — :
ActionController::RoutingError (No route matches [GET] “/en/sign_in”):
actionpack (4.2.3)
lib/action_dispatch/middleware/debug_exceptions.rb:21:in call'
newrelic_rpm (3.12.1.298)
lib/new_relic/agent/instrumentation/middleware_tracing.rb:67:in
call’
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’
railties (4.2.3) lib/rails/rack/logger.rb:38:in 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
结果我得到了:

As Domain: “co.ao”

As Subdomain: “api.mydomain”

但我的子域名只有:api

怎么了?

解决方法

默认

tld_length = 1

您需要将tld_length更新为2,例如:co.in,co.au

尝试:

config.action_dispatch.tld_length = 2

在config / enviroments / production.rb中

Reference

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读