【问题标题】:Is there any dependency between config/environments/*.rb files and config/deploy/*.rb files? If yes,does it impact Capistrano deploy?config/environments/*.rb 文件和 config/deploy/*.rb 文件之间是否存在依赖关系?如果是,它会影响 Capistrano 部署吗?
【发布时间】:2020-01-03 22:15:05
【问题描述】:

我试图了解不同的配置文件是如何在幕后协同工作的。尤其是与 environment/.rb 和 deploy/.rb 文件相关的配置。我知道 config/environments 目录是由 rails 创建的,而 config/deploy 是由 capistrano 创建的。我的理解是,这两组配置有不同的用途。只是想澄清一下我的理解,如果这两组配置在使用 rails 运行应用程序或部署应用程序时以任何方式相互交互。 TIA。

【问题讨论】:

  • environments/.rb 包含运行 rails 应用程序(服务器、测试、控制台等)时使用的设置。 config/deploy 用于将应用程序部署到生产服务器的配置(例如版本控制系统、FTP 等)。

标签: ruby-on-rails config capistrano3


【解决方案1】:

它们没有直接关系,但确实相互作用。

如前所述,config/environment/*.rb 包含特定于环境的设置。这是在 Rails 启动时评估的。

config/deploy.rb 包含常规 Capistrano 部署配置。通常,为某些部署情况创建一组特定配置很有用,在这种情况下,您在config/deploy/*.rb 中定义文件。最常见的情况是针对不同的环境进行不同的部署。这是两者可以互动的地方。

例如,如果您的暂存环境连接到一组服务器,而生产环境连接到另一组服务器,您可能会定义 config/deploy/staging.rbconfig/deploy/production.rb。这些将定义它们要去的服务器,并通过运行cap stagename deploy 触发,其中stagenameconfig/deploy/*.rb 中的文件名(不带文件扩展名)。

config/deploy/*.rb 文件中,您还可以定义在部署期间运行的Rails 命令使用的rails 环境,例如资产编译和Bundler 安装。您可以通过添加行 set :rails_env, 'staging' 来做到这一点,其中 stagingconfig/environments/*.rb 中的文件名(同样,没有文件扩展名)。

但是,虽然在上面的示例中,两个文件之间存在 1:1 的相关性,但并不总是需要如此。例如,如果您通过环境变量注入所有特定于环境的配置,您可能在config/deploy/ 中有暂存和生产文件,但在config/environments/ 中只有一个生产文件。在这种情况下,您将暂存 Rails 作为生产环境运行。在这种情况下,您需要定义 set :rails_env, 'production',可能在 config/deploy.rb 中。

另外需要注意的是,如果您使用 capistrano-rails gem 并且没有在部署配置中明确定义 rails_env 设置,it will guess the Rails environment based on the stage name(部署时调用的文件的名称,例如 cap stagename deploy) .因此,您可能会误以为您需要在那里进行 1:1 映射。但是,如果不需要其他配置文件,只需显式定义set :rails_env, 'stagename'即可。

【讨论】:

    【解决方案2】:

    environment/**.rb 包含您的应用程序在不同环境(测试、开发、生产)中运行时的设置。 deploy/**.rb 包含应用程序在部署时的设置(暂存、生产)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-20
      • 1970-01-01
      • 2021-09-09
      • 2020-09-29
      相关资源
      最近更新 更多