ruby-on-rails – 迁移不能在Heroku上工作

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 迁移不能在Heroku上工作前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在Heroku上运行pg:reset,并尝试运行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)

在开发和生产环境中,这在本地工作无任何问题.

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

@H_403_12@

解决方法

这是一个有趣的错误,事实证明,可以忽略.基于它试图做一个db:structure:dump的事实,你使用’sql’作为你的active_record.schema_format. rake任务db:结构:dump将在heroku上失败,因为pg_dump(不出意料)不在二进制路径中.有趣的是,Heroku states该db:schema:dump不受支持,但是如果您将模式格式设置为ruby,则可以正常工作.

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

可能的解决方案:

>迁移实际运行时忽略该错误.
>由于您不关心生产中的结构转储,请将schema_format设置为ruby.在config / environments / production.rb中:

config.active_record.schema_format = :ruby

>如果由于某些原因您不想更改配置文件添加以下的耙子任务来抑制错误

if Rails.env == 'production'
    Rake::Task["db:structure:dump"].clear
end
@H_403_12@ @H_403_12@

猜你在找的Ruby相关文章