【问题标题】:Rails app with multiple domains具有多个域的 Rails 应用程序
【发布时间】:2020-09-08 06:06:07
【问题描述】:

我陷入了困境。我有一个 Rails 应用程序,它在 DO droplet 和超过 10 个域上运行,Nginx 作为 Web 服务器和 Puma。网站之间的区别在于每个域及其数据库的样式。所以我不知道如何使它工作。 如我所见,我应该为每个站点创建一个单独的套接字并配置重定向。

在本地它的工作方式如下:在.env 文件中,我定义了一些站点,即domain1.comand 应用程序选择了某些样式和。 对不起,我可能错了,我不是开发人员,我只需要部署它。目前它托管在 Heroku 上,为单独的站点提供单独的应用程序。

【问题讨论】:

  • 只要它依赖于环境变量,您就需要在您的服务器上为每个域创建单独的应用程序。我建议聘请专业人士来完成这项任务,因为它不是那么简单。
  • 基于域切换样式似乎很好,但是切换数据库让我觉得这需要单独部署多个应用程序。您是否需要为每个站点使用不同的数据库?
  • 是的,谢谢您的回答。是的,每个站点都有不同的数据库。所以我要单独部署每个应用程序

标签: ruby-on-rails nginx puma mina


【解决方案1】:

您可以为不同的域创建不同的任务。每个任务只需设置适当的变量。

看看https://github.com/mina-deploy/mina/blob/master/docs/cookbook.md#multi-environment-deploy

【讨论】:

  • 我的任务有点不同,不过还是谢谢
【解决方案2】:

Rails 只需使用 routes.rb 文件即可轻松处理多个域。您可以为您的路由添加约束,以便这些端点和控制器仅响应对特定域的请求。

约束可能如下所示:

constraints(ShopDomain) do
  resources :shop
  get '/subscription', to: 'shop#subscription'
  root to: 'shop#index'
end

您可以定义约束,例如域或子域是否与字符串匹配。可能是这样的:

class ShopDomain
  def self.matches? request
    request.subdomain == 'shop'
  end
end

现在,在您的情况下,每个站点都有自己的控制器,这些控制器有自己的视图和样式。

我在我的博客上对此策略进行了更深入的描述, here.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    • 2021-08-08
    • 2021-03-05
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多