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

Heroku部署Rails项目时出现NoMethodError(nil调用[]方法)

解决Rails部署Heroku时的NoMethodError问题

错误原因定位

从错误日志和production.rb代码来看,第124行的Rails.application.credentials.zoho[:user_name]触发报错——Rails.application.credentials.zoho在Heroku生产环境中为nil,调用[]方法时抛出undefined method []' for nil:NilClass。

解决步骤

1. 确认本地Credentials配置

先检查本地config/credentials.yml.enc文件是否包含正确的Zoho配置:
执行命令打开Credentials编辑器:

rails credentials:edit

确保文件内有如下结构:

zoho:
  user_name: 你的Zoho邮箱账号
  password: 你的Zoho应用专用密码

2. 让Heroku读取到Credentials

Heroku不会自动同步本地的credentials.yml.enc和master.key,有两种常用解决方式:

方式一:改用环境变量(推荐,简单直观)

  • 在本地终端执行以下命令,将Zoho的账号密码设置为Heroku环境变量:
heroku config:set ZOHO_USER_NAME=你的Zoho邮箱账号
heroku config:set ZOHO_PASSWORD=你的Zoho应用专用密码
  • 修改production.rb中的SMTP配置,替换为读取环境变量:
config.action_mailer.smtp_settings = {
  address: "smtp.zoho.com", # 注意:原代码写的是smtp.gmail.com,若使用Zoho邮箱需修正为此地址
  port: 587,
  domain:'zoho.com',
  user_name: ENV['ZOHO_USER_NAME'],
  password: ENV['ZOHO_PASSWORD'],
  authentication: 'login',
  ssl: true,
  tls: true,
  enable_starttls_auto: true
}

方式二:同步本地Credentials到Heroku

  • 安装Heroku Rails Credentials插件:
heroku plugins:install heroku-rails-credentials
  • 将本地的Credentials内容上传到Heroku:
heroku rails:credentials:set

(执行后会打开编辑器,粘贴本地credentials.yml.enc内的内容并保存)

  • 设置RAILS_MASTER_KEY环境变量,让Heroku能解密Credentials:
heroku config:set RAILS_MASTER_KEY=$(cat config/master.key)

3. 额外检查点

  • 确认SMTP地址匹配你的邮箱服务商:若用Zoho邮箱,必须使用smtp.zoho.com,原代码中的smtp.gmail.com是错误配置。
  • 确认Zoho密码为应用专用密码,而非账号登录密码(开启两步验证后必须使用专用密码)。

验证部署

修改完成后,重新部署到Heroku:

git add .
git commit -m "fix: 修复Heroku部署时Credentials为空的错误"
git push heroku main

内容的提问来源于stack exchange,提问作者Macson Soares Rocha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 08:20:34