Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails应用程序在不同配置的生产环境中多次运行_Ruby On Rails_Configuration - Fatal编程技术网

Ruby on 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

我想在同一台服务器上运行同一个rails应用程序几次,但配置有所不同。每个应用程序必须有自己的:

  • 数据库
  • 港口
  • cookie\u存储密钥(不确定是否需要)
  • 秘密密钥库
假设我想多次运行相同的代码以服务于不同的城市: newyork.myapp.com和boston.myapp.com。我想知道存储和使用不同配置的最佳方式是什么

使用环境:

将一个文件添加到
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会导致任何问题。这是明智的。