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

Ruby on Rails应用推送Heroku遭拒,执行migrate后报错求助

解决Heroku推送Ruby on Rails应用失败的问题

从你提供的报错信息和代码来看,核心问题出在application.rb的配置代码位置错误,导致Heroku编译时抛出NameError: undefined local variable or method 'config' for main:Object,进而无法检测rake任务,最终推送被拒绝。

问题定位

看你的application.rb代码:

require File.expand_path('../boot', __FILE__)
config.assets.initialize_on_precompile = false # 这里是错误的根源
require 'rails/all'
Bundler.require(*Rails.groups)

module Workspace
  class Application < Rails::Application
    config.active_record.raise_in_transactional_callbacks = true
  end
end

config.assets.initialize_on_precompile = false这行代码直接写在了全局作用域,而config变量只有在Rails::Application的子类(也就是你的Workspace::Application类)内部才有效,而且你还把它放在了require 'rails/all'之前,这时候Rails的配置系统还没加载,自然找不到config这个方法/变量。

修复步骤

  1. 修正application.rb代码
    把那行配置移到Workspace::Application类的内部,调整后的代码如下:
require File.expand_path('../boot', __FILE__)
require 'rails/all'

Bundler.require(*Rails.groups)

module Workspace
  class Application < Rails::Application
    config.active_record.raise_in_transactional_callbacks = true
    # 把配置移到这里,放在正确的上下文里
    config.assets.initialize_on_precompile = false
  end
end
  1. 本地验证rake任务
    在本地项目根目录运行以下命令,确保rake任务能正常执行:
bundle exec rake -P

如果这个命令能正常输出所有rake任务列表,说明本地配置已经没问题了。

  1. 重新提交并推送
    提交修改后的代码:
git add .
git commit -m "Fix config location in application.rb"

然后重新推送到Heroku:

git push heroku master
  1. 再次执行数据库迁移
    推送成功后,运行数据库迁移:
heroku run rake db:migrate

额外检查点

  • 确认你的production.rb语法无误:从你提供的代码看,config.paperclip_defaults的括号是闭合的,没有语法错误,不过可以再检查一遍是否有遗漏的引号或括号。
  • 确保Heroku上的环境变量(比如S3相关的S3_BUCKET_NAME、AWS_ACCESS_KEY_ID等)已经正确设置,避免后续运行时出现问题。

内容的提问来源于stack exchange,提问作者Rony M.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:46:02