gpt4 book ai didi

ruby-on-rails - 迁移不适用于 Heroku

转载 作者:行者123 更新时间:2023-12-03 21:01:52 25 4
gpt4 key购买 nike

我跑了 pg:reset在 Heroku 上并尝试运行 db:migrate ,所有迁移都运行,但迁移失败并显示以下错误和跟踪:

rake aborted!
Error dumping database
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.0.rc2/lib/active_record/tasks/postgresql_database_tasks.rb:55:in `structure_dump'
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.0.rc2/lib/active_record/tasks/database_tasks.rb:142:in `structure_dump'
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.0.rc2/lib/active_record/railties/databases.rake:288:in `block (3 levels) in <top (required)>'
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.0.rc2/lib/active_record/railties/databases.rake:51:in `block (2 levels) in <top (required)>'
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.0.rc2/lib/active_record/railties/databases.rake:45:in `block (2 levels) in <top (required)>'

可以看出 here有问题的行和上面的行是:
command = "pg_dump -i -s -x -O -f #{Shellwords.escape(filename)} #{search_path} #{Shellwords.escape(configuration['database'])}"
raise 'Error dumping database' unless Kernel.system(command)

这在开发和生产环境中都可以在本地运行,没有任何问题。

有没有人经历过这样的事情?

最佳答案

这是一个有趣的错误,事实证明,它可以被忽略。基于它正在尝试执行 db:structure:dump 的事实,您正在使用 'sql' 作为您的 active_record.schema_format。 rake 任务 db:structure:dump 将在 heroku 上失败,因为 pg_dump(不出所料)不在二进制路径中。有趣的是,Heroku states不支持 db:schema:dump 但如果您将架构格式设置为 ruby​​,它就可以正常工作。

在 Rails 3 中,dump 任务只会在命令的退出代码为 1 时引发错误。在基于 unix 的系统上,如果找不到该命令,则退出代码为 127。因此,即使 pg_dump 命令在 rails 3 上失败(确实如此),它不会引发错误,也不会停止 rake 任务。所以任何在 Rails 3 中使用 sql 模式格式的人都不会遇到这个问题,因为它会默默地失败。 Rails 4 中的重构以在转储失败时正确引发错误导致 db:migrate 在 Heroku 上引发错误。然而,即使它出错 rake aborted ddl 实际执行并提交 .

可能的解决方案:

  • 在迁移实际运行时忽略错误。
  • 由于您不关心生产中的结构转储,请将 schema_format 设置为 ruby​​。在 config/environments/production.rb :
    config.active_record.schema_format = :ruby
  • 如果由于某种原因您不想更改配置文件:添加一个包含以下内容的 rake 任务以抑制错误:
    if Rails.env == 'production'
    Rake::Task["db:structure:dump"].clear
    end
  • 关于ruby-on-rails - 迁移不适用于 Heroku,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17300341/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com