rails app在生产中以不同的配置运行多次

时间:2014-08-14 12:05:29

标签: ruby-on-rails configuration

我希望在同一台服务器上运行相同的rails应用程序几次配置差异。每个应用都必须有自己的:

  • 数据库
  • 端口
  • cookie_store密钥(不确定是否需要)
  • secret_key_base

假设我想多次运行相同的代码来为不同的城市提供服务: newyork.myapp.com和boston.myapp.com。我想知道存储和使用不同配置的最佳方式是什么。

1 个答案:

答案 0 :(得分:1)

使用环境:

将文件添加到config/environments,每个网站对应一个您要托管的网站。将其命名为' production_ [city]',用城市名称替换[city]。将production.rb文件内容复制到每个文件中。

<{1>}在config/database.yml中找到&#39;制作&#39; 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和会话。或者你可以去子域路线:

http://guides.rubyonrails.org/configuring.html#deploy-to-a-subdirectory-relative-url-root

tldr:

在config / environments / production_ny.rb中:

config.relative_url_root = "/ny"
例如,

。然后设置您的Web服务器以处理子目录。您可能需要添加cookie的路径,以便将它们范围限定为虚拟目录。只需使用:

Rails.configuration.relative_url_root

还必须在网络服务器级别设置端口。 (Apache,nginx等)

要查看是否一切正常,请在命令行中尝试:

RAILS_ENV=production_ny bundle exec rails s

这应该启动一个开发风格的Web服务器供您访问,但使用production_ny环境。

您需要正常创建和设置数据库 - 创建,迁移,种子。

最后一步是使用您的Web服务器将每个应用程序的RAILS_ENV环境变量设置为production_[city]。执行此操作的步骤取决于您的技术选择。