You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在deploy/identifier.rb中设置Rails环境并处理eager_load报错?

单个VPS多实例Rails应用的环境配置解决方案

问题背景

在单个VPS上部署同一Rails应用的多个独立实体,每个实体拥有专属系统用户、部署目录、PostgreSQL数据库及database.yml配置。默认以生产模式部署正常,但切换到开发模式部署时,资产编译和db:migrate步骤会触发config.eager_load未设置的报错,同时需要通过deploy/identifier.rb指定对应实体的Rails环境。


1. 通过deploy/identifier.rb指定Rails环境

Capistrano中通过:rails_env变量控制Rails运行环境,直接在目标实体的deploy/identifier.rb文件中添加配置即可覆盖默认的生产环境:

# deploy/identifier.rb
set :deploy_to, '/home/identifier/application_name'
# 为该实体指定Rails环境(示例为开发模式)
set :rails_env, 'development'

设置后,Capistrano执行所有相关任务(如资产编译、数据库迁移)时,都会使用这个指定的环境。

2. 修复开发模式下的eager_load报错

报错提示config.eager_load is set to nil是Rails 4+的环境配置要求,和Capistrano无关,直接修改Rails项目的开发环境配置文件即可:

  1. 打开项目中的config/environments/development.rb
  2. 添加或修改以下配置项:
# config/environments/development.rb
config.eager_load = false

这完全匹配报错提示中的要求,开发环境下eager_load需设为false。

3. 额外配置提示

  • 确保database.yml中的环境块名称与:rails_env设置一致。如果使用自定义环境名(比如identifier_development),需同步将:rails_env设为该名称,同时在config/environments目录下创建对应的环境配置文件(如identifier_development.rb)并设置eager_load值。
  • 若开发模式部署不需要资产编译,可在deploy/identifier.rb中添加以下配置跳过该步骤:
set :assets_roles, [] # 禁用资产编译任务

内容的提问来源于stack exchange,提问作者Jerome

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 22:57:26