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

Rails 6.1.6.1应用部署至Heroku失败,请求技术支持

Rails 6.1.6.1 部署到Heroku的问题及解决建议

我把基于Rails 6.1.6.1的应用部署到Heroku时失败了,本地运行正常,但部署出问题。之前用Rails 7部署同款应用是成功的,部署过程中看到几个警告:

  • Windows环境生成的Gemfile.lock被移除,Bundler将重新解析依赖
  • 应用未安装net-smtp,需添加至Gemfile并执行bundle install
  • Rails配置检测失败,可设置HEROKU_DEBUG_RAILS_RUNNER=1调试
  • 未检测到Procfile,使用默认Web服务器

完整部署日志

D:\develop\rubyproject\alphablog>git push heroku main
枚举对象:9,完成。
计数对象:100% (9/9),完成。
使用最多8线程进行增量压缩
压缩对象:100% (6/6),完成。
写入对象:100% (6/6),607字节 | 607.00 KiB/s,完成。
总计6个(差异4个),复用0个(差异0个),未复用0个
remote: 压缩源文件... 完成。
remote: 构建源文件:
remote:
remote: -----> 在Heroku-20栈上构建
remote: -----> 使用buildpack:heroku/ruby
remote: -----> 检测到Ruby应用
remote: -----> 安装bundler 2.3.10
remote: -----> 移除Gemfile.lock中的BUNDLED WITH版本
remote: -----> 编译Ruby/Rails
remote: -----> 使用Ruby版本:ruby-3.1.2
remote:
remote: ###### 警告:
remote:
remote:        正在移除`Gemfile.lock`,因为它是在Windows上生成的。
remote:        Bundler将进行完整依赖解析,以正确处理原生gem。
remote:        这可能导致应用使用意外的gem版本。
remote:        在极少数情况下,Bundler可能无法解析你的依赖。
remote:
remote: -----> 使用bundler 2.3.10安装依赖
remote:        执行:BUNDLE_WITHOUT='development:test' BUNDLE_PATH=vendor/bundle BUNDLE_BIN=vendor/bundle/bin bundle install -j4
remote:        从https://rubygems.org/获取gem元数据...........
remote:        解析依赖.....
remote:        使用rake 13.0.6
remote:        使用concurrent-ruby 1.1.10
remote:        使用minitest 5.16.2
remote:        使用zeitwerk 2.6.0
remote:        使用builder 3.2.4
remote:        使用erubi 1.11.0
remote:        使用racc 1.6.0
remote:        使用crass 1.0.6
remote:        使用rack 2.2.4
remote:        使用nio4r 2.5.8
remote:        使用websocket-extensions 0.1.5
remote:        使用marcel 1.0.2
remote:        使用mini_mime 1.1.2
remote:        使用msgpack 1.5.4
remote:        使用bundler 2.3.10
remote:        使用ffi 1.15.5
remote:        使用method_source 1.0.0
remote:        使用pg 1.4.2
remote:        使用thor 1.2.1
remote:        使用tilt 2.0.11
remote:        使用semantic_range 3.0.0
remote:        使用turbolinks-source 5.2.0
remote:        使用i18n 1.12.0
remote:        使用tzinfo 2.0.5
remote:        使用activesupport 6.1.6.1
remote:        使用nokogiri 1.13.8 (x86_64-linux)
remote:        使用rack-test 2.0.2
remote:        使用websocket-driver 0.7.5
remote:        使用mail 2.7.1
remote:        使用bootsnap 1.13.0
remote:        使用puma 5.6.4
remote:        使用rack-proxy 0.7.2
remote:        使用sprockets 4.1.1
remote:        使用sassc 2.4.0
remote:        使用turbolinks 5.2.1
remote:        使用rails-dom-testing 2.0.3
remote:        使用loofah 2.18.0
remote:        使用globalid 1.0.0
remote:        使用activemodel 6.1.6.1
remote:        使用rails-html-sanitizer 1.4.3
remote:        使用activejob 6.1.6.1
remote:        使用activerecord 6.1.6.1
remote:        使用actionview 6.1.6.1
remote:        使用actionpack 6.1.6.1
remote:        使用jbuilder 2.11.5
remote:        使用actioncable 6.1.6.1
remote:        使用activestorage 6.1.6.1
remote:        使用actionmailer 6.1.6.1
remote:        使用railties 6.1.6.1
remote:        使用sprockets-rails 3.4.2
remote:        使用actiontext 6.1.6.1
remote:        使用actionmailbox 6.1.6.1
remote:        使用webpacker 5.4.3
remote:        使用rails 6.1.6.1
remote:        使用sassc-rails 2.1.2
remote:        使用sass-rails 6.0.0
remote:        依赖安装完成!Gemfile中有16个依赖,现在共安装了56个gem。
remote:        未安装'development'和'test'组中的gem。
remote:        已安装的gem存放在`./vendor/bundle`
remote:        依赖安装完成(耗时2.83秒)
remote:        清理bundler缓存。
remote: -----> 安装node-v16.13.1-linux-x64
remote: -----> 安装yarn-v1.22.17
remote: -----> 检测rake任务
remote: -----> 为Rails资源管道准备应用
remote:        执行:rake assets:precompile
remote:        你的应用未安装net-smtp,请将其添加到Gemfile并执行bundle install
remote:        yarn install v1.22.17
remote:        [1/4] 解析包...
remote:        [2/4] 获取包...
remote:        [3/4] 链接依赖...
remote:        [4/4] 构建新包...
remote:        完成,耗时15.60秒。
remote:        编译中...
remote:        已编译/tmp/build_a9f44d06/public/packs中的所有包
remote:        哈希值:964bd55ba6668af1f1c1
remote:        版本:webpack 4.46.0
remote:        耗时:3673毫秒
remote:        构建时间:2022年8月9日 上午6:46:50
remote:                                                资源       大小  块                         块名称
remote:               js/application-4cb2b08e3c41888f7737.js   68.2 KiB       0  [已输出] [不可变]  application
remote:            js/application-4cb2b08e3c41888f7737.js.br   15.2 KiB          [已输出]
remote:            js/application-4cb2b08e3c41888f7737.js.gz   17.5 KiB          [已输出]
remote:           js/application-4cb2b08e3c41888f7737.js.map    204 KiB       0  [已输出] [开发版]        application
remote:        js/application-4cb2b08e3c41888f7737.js.map.br   43.4 KiB          [已输出]
remote:        js/application-4cb2b08e3c41888f7737.js.map.gz   50.2 KiB          [已输出]
remote:                                        manifest.json  364字节          [已输出]
remote:                                     manifest.json.br  129字节          [已输出]
remote:                                     manifest.json.gz  142字节          [已输出]
remote:        入口点 application = js/application-4cb2b08e3c41888f7737.js js/application-4cb2b08e3c41888f7737.js.map
remote:        [3] ./app/javascript/packs/application.js 480字节 {0} [已构建]
remote:        [4] ./app/javascript/channels/index.js 205字节 {0} [已构建]
remote:        [5] ./app/javascript/channels sync _channel\.js$ 160字节 {0} [已构建]
remote:            + 3个隐藏模块
remote:
remote:        资源预编译完成(耗时23.49秒)
remote:        清理资源
remote:        执行:rake assets:clean
remote:        你的应用未安装net-smtp,请将其添加到Gemfile并执行bundle install
remote: -----> 检测Rails配置
remote:
remote: ###### 警告:
remote:
remote:        正在移除`Gemfile.lock`,因为它是在Windows上生成的。
remote:        Bundler将进行完整依赖解析,以正确处理原生gem。
remote:        这可能导致应用使用意外的gem版本。
remote:        在极少数情况下,Bundler可能无法解析你的依赖。
remote:
remote: ###### 警告:
remote:
remote:        检测Rails配置失败
remote:        设置HEROKU_DEBUG_RAILS_RUNNER=1进行调试
remote:
remote: ###### 警告:
remote:
remote:        未检测到Procfile,使用默认Web服务器。
remote:        我们建议通过Procfile明确声明如何启动服务器进程。
remote:
remote:
remote: -----> 发现进程类型
remote:        Procfile声明的类型     -> 无
remote:        buildpack的默认类型 -> console, rake, web
remote:
remote: -----> 压缩中...
remote:        完成:91.6M
remote: -----> 启动中...
remote:        发布版本v7
remote:        https://alphablogonr6.herokuapp.com/ 已部署到Heroku
remote:
remote: 此应用使用Heroku-20栈,但有更新的栈可用。
remote: 要升级到Heroku-22,请查看相关文档。
remote:
remote: 验证部署... 完成。
To https://git.heroku.com/alphablogonr6.git
   aaa1b45..55e9f84  main -> main

问题解决步骤

1. 处理Windows生成的Gemfile.lock

Windows和Linux的原生gem依赖存在差异,Heroku会自动移除Windows环境生成的Gemfile.lock并重新解析依赖,可能导致版本不一致。解决方法:

  • 用WSL、Docker等Linux环境生成Gemfile.lock,再提交到Git仓库
  • 或删除本地Gemfile.lock,让Heroku自动解析依赖,但需注意可能出现的版本兼容问题

2. 安装net-smtp gem

Rails 6.1的Action Mailer依赖net-smtp,但该gem在Ruby 3.x中不再默认包含。操作步骤:

  • 打开项目根目录的Gemfile,添加一行:gem 'net-smtp'
  • 本地执行bundle install更新依赖
  • 提交Gemfile和Gemfile.lock的更改后重新部署

3. 调试Rails配置检测失败

这个警告暂时不影响应用运行,但可以排查配置问题:

  • 在Heroku设置环境变量:heroku config:set HEROKU_DEBUG_RAILS_RUNNER=1
  • 重新部署,查看详细日志定位配置文件的语法或路径问题

4. 添加Procfile(可选但推荐)

Heroku会使用默认Web服务器,但添加Procfile可以明确服务器启动命令,避免后续问题:

  • 在项目根目录创建Procfile文件,内容为:web: bundle exec puma -C config/puma.rb
  • 提交文件后重新部署

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 19:54:22