ootb rails有3种环境
如何处理其他环境,例如分段?
当我想从暂存环境中想要什么时,我想要大多数生产设置,但通常服务器名称和其他特定值与生产不同。
您是否为每个自定义环境创建1:N环境/ * .rb?或者您是否将环境视为配置文件,然后使用application.yml或secrets.yml之类的东西来运行具有不同服务器配置的应用程序?
过去哪些方面效果不错,哪些方面没有效果?
答案 0 :(得分:1)
这取决于你的“舞台”环境是不同的东西,或者实际上是“生产”环境的变体,通常就是这种情况。
通常,您只需将完整生产模式(使用production.rb
文件和所有内容)部署到非生产服务器。这种区别与rails无关,仅对您的部署脚本有影响。例如,Capistrano会担心这一点。
您需要另一个环境的唯一时间是您需要一组不同的Rails设置。
答案 1 :(得分:0)
适用于上述任何方式。
在某些情况下,我使用的是1:N方式,因为当您具有固定的部署环境数时(例如,当我将自己的宠物项目部署到远程服务器时),这很容易。
但在其他情况下,我使用的是一组默认环境(例如,当我将项目部署到不同的客户时)。
只需选择适合您和项目的任何方式。
答案 2 :(得分:0)
在我看来,当我在暂存环境中运行应用程序时,我希望它具有与生产中完全相同的设置,因为在我发布新代码之前检查一切是否正常时。所以我创建了一个environments/staging.rb
,它实际上是environments/production.rb
的符号链接。要部署,我使用Capistrano,它允许您为所需的每个环境定义服务器设置。如果你不了解它,我真的很鼓励你去看看它,因为它使得部署就像运行一个简单的命令一样简单,它负责上传新代码,预编译资产,重启服务器,等
答案 3 :(得分:0)
我使用require_relative
创建与生产相同的临时环境,然后覆盖不同的部分。通常唯一的区别是主机名。
这是environments/staging.rb
的样子:
# Staging configuration is identical to production, with some overrides
# for hostname, etc.
require_relative "./production"
Rails.application.configure do
config.action_mailer.default_url_options = {
:host => "staging.example.com",
:protocol => "https"
}
config.action_mailer.asset_host = "https://staging.example.com"
end