Ruby on rails rails应用程序在不同配置的生产环境中多次运行
我想在同一台服务器上运行同一个rails应用程序几次,但配置有所不同。每个应用程序必须有自己的:Ruby on rails rails应用程序在不同配置的生产环境中多次运行,ruby-on-rails,configuration,Ruby On Rails,Configuration,我想在同一台服务器上运行同一个rails应用程序几次,但配置有所不同。每个应用程序必须有自己的: 数据库 港口 cookie\u存储密钥(不确定是否需要) 秘密密钥库 假设我想多次运行相同的代码以服务于不同的城市: newyork.myapp.com和boston.myapp.com。我想知道存储和使用不同配置的最佳方式是什么 使用环境: 将一个文件添加到config/environments,每个站点对应一个文件。将其命名为“生产”[city],将[city]替换为城市名称。将produc
- 数据库
- 港口
- cookie\u存储密钥(不确定是否需要)
- 秘密密钥库
config/environments
,每个站点对应一个文件。将其命名为“生产”[city],将[city]替换为城市名称。将production.rb
文件内容复制到每个文件中
在config/database.yml
中找到yml的“生产”块,并为每个要托管的站点复制一次。将每个块的根节点重命名为production[city],与上面的文件名匹配。例如:
production_ny:
adapter: mysql2
username: my_user
password: my_pa$$w0rd%&*#
database: production_ny
这将负责每个应用程序的数据库设置
假设Rails 4,您的密钥库将位于环境节点下的config/secrets.yml中,如config/database.yml所示,因此只需为每个站点添加一个条目:
production_ny:
secret_key_base: xxxxxxxx1111111122222223333333344444444...
所有站点都需要一个端点。为每个域使用不同的域将免费为您提供单独的cookie和会话。或者,您可以选择子域路径:
tldr:
在您的config/environments/production_ny.rb中:
config.relative_url_root = "/ny"
比如说。然后设置Web服务器来处理子目录。您可能需要向Cookie添加路径,以便将其限定到虚拟目录。只需使用:
Rails.configuration.relative_url_root
端口同样必须在Web服务器级别设置。(Apache、nginx等)
要查看是否所有功能都正常,请在命令行中尝试以下操作:
RAILS_ENV=production_ny bundle exec rails s
这将启动一个开发风格的Web服务器供您访问,但要使用生产环境
您将需要像平常一样创建和设置数据库—创建、迁移和种子
最后一步是使用web服务器将RAILS_ENV环境变量设置为每个应用程序的
production_[city]
。实现这一点的步骤将取决于您的技术选择。这也是我一直在思考的问题,但与社区一起进行健全性检查始终是一个好主意:)注意一点。除非您使用不同的域,否则我不确定会话将如何响应由虚拟文件夹分隔的多个站点。。。除非在座的其他任何人都有具体的经验,否则值得模拟一个解决方案来找出答案。我认为如果我使用子域,这应该不会是一个问题,就像现在dev.myapp和www.myapp不冲突一样,不应该有任何理由说明ny.myapp和boston.myapp会导致任何问题。这是明智的。