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

推送Rails应用至Dokku遇Pre-receive hook declined报错求助

排查Rails 7.0推送Dokku时的Pre-receive hook declined及Logger常量错误

1. 确认Ruby版本兼容性

  • Rails 7.0要求Ruby版本至少2.7.0,推荐3.0以上。先确保Dokku构建环境使用的Ruby版本符合要求:
    • 在项目根目录创建.ruby-version文件,写入指定版本(如3.1.2),Dokku会自动读取该文件选择对应Ruby版本。
    • 服务器执行dokku config:set <你的应用名> RUBY_VERSION=3.1.2强制指定版本,之后重新推送。

2. 校验ActiveSupport依赖版本

  • 该报错多因ActiveSupport版本与Ruby/Rails版本不匹配导致:
    • 查看Gemfile.lock中activesupport的版本,确保和Rails 7.0的版本一致(如7.0.4.3)。
    • 删除本地Gemfile.lock,重新执行bundle install生成新锁文件后再推送。
    • 服务器进入应用构建目录(通常为/home/dokku/<你的应用名>/build),执行bundle show activesupport确认版本是否正确。

3. 获取Dokku构建的详细日志

  • dokku log可能未捕获构建阶段错误,改用以下命令查看:
    • 执行dokku apps:logs <你的应用名> -t实时监控推送过程的日志输出。
    • 执行dokku build-env:show <你的应用名>检查是否有影响依赖安装的环境变量配置。

4. 验证Rake任务的执行环境

  • 先排除本地代码问题:
    • 本地执行RAILS_ENV=production rake --tasks模拟生产环境的rake执行,看是否出现相同错误。
    • 若本地正常,在服务器手动构建复现问题:
      1. 克隆代码到临时目录:git clone <你的仓库地址> temp-app
      2. 进入目录:cd temp-app
      3. 设置生产环境:export RAILS_ENV=production
      4. 依次执行bundle install和rake --tasks,观察是否复现错误。

5. 更新Dokku的Ruby构建插件

  • 检查Ruby插件版本是否兼容Rails 7.0:
    • 执行dokku plugin:list查看已安装的ruby插件及版本。
    • 若版本过旧,执行dokku plugin:update ruby更新插件后重新推送。

6. 排查自定义Logger配置

  • 报错涉及Logger常量,检查项目中是否有相关自定义代码:
    • 查看config/environments/production.rb中的日志配置,是否存在错误的常量引用。
    • 检查项目中是否有自定义Logger类,是否与ActiveSupport的Logger命名冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 07:18:09