在 Heroku 上执行 rake db:migrate 时出错

Posted

技术标签:

【中文标题】在 Heroku 上执行 rake db:migrate 时出错【英文标题】:Error when doing rake db:migrate on Heroku 【发布时间】:2012-09-06 22:57:48 【问题描述】:

什么时候做

heroku run rake db:migrate

执行所有迁移,然后,最后我总是收到以下消息:

/app/vendor/bundle/ruby/1.9.1/bin/rake: No such file or directory - pg_dump -i -s -x -O -f /app/db/structure.sql dan79p98fykovu

我无法将 pg_dump 添加到 Heroku 上的 PATH。 如何处理?

【问题讨论】:

您的 Gemfile 中有什么?可能是您有一个 gem 试图在依赖于该 pg_dump 的迁移之后执行一些代码。在我使用 RSpec 进行测试时,每次运行与 Test::Unit 相关的 rake 任务运行后,我都会收到一条错误消息 - 有点类似的问题 看看这个 SO 问题:***.com/questions/10248893/… 可能是您使用的 Rails 版本存在此错误/问题 - 您使用的是什么版本? 【参考方案1】:

问题是一旦迁移完成,rails 会尝试转储新的structure.sql,但由于pg_dump 不存在而失败。为已部署的应用生成新的 structure.sql 是没有意义的,因此最好的解决方案是告诉 rails 不要这样做。

编辑您的Rakefile 并覆盖该任务。在它的末尾添加以下行应该可以做到:

Rake::Task["db:structure:dump"].clear if Rails.env.production?

【讨论】:

n.b.:这仅在使用 structure.sql 时发生,而不在使用 schema.rb 时发生 unless Rails.env.development? 不是更好的条件吗? 为什么pg_dump 不存在? 生产应用程序不需要它。

以上是关于在 Heroku 上执行 rake db:migrate 时出错的主要内容,如果未能解决你的问题,请参考以下文章

使用参数在 Heroku 上运行 rake 任务并指定 Heroku 应用程序

如何在 Heroku 上 rake db:drop 和 rake db:create? [复制]

Rake 资产:Heroku 错误上的预编译

如何解决极其缓慢的 rake assets:在 heroku 上预编译?

在'rake assets:precompile'之后,Rails 4 资产未加载到 Heroku

Rails 3 和 Heroku:推送时自动“rake db:migrate”?