rai*_*400 14 activerecord ruby-on-rails heroku
我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)>'
Run Code Online (Sandbox Code Playgroud)
从这里可以看出,有问题的线和上面的线是:
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)
Run Code Online (Sandbox Code Playgroud)
无论是在开发环境还是生产环境中,这都可以在本地运行.
有没有人经历过这样的事情?
Luk*_*und 50
这是一个有趣的错误,事实证明,它可以被忽略.基于它尝试执行db:structure:dump的事实,您使用'sql'作为active_record.schema_format.rake任务db:structure:dump将在heroku上失败,因为pg_dump(不出所料)不在二进制路径中.有趣的是,Heroku声明不支持db:schema:dump但是如果你将架构格式设置为ruby,它可以正常工作.
在Rails 3中,转储任务只会引发错误,即命令的退出代码为1.在基于unix的系统上,如果找不到该命令,则退出代码为127.因此,即使pg_dump命令在rails 3上失败(这样做,它不会引发错误,也不会停止rake任务.所以任何使用Rails 3的sql架构格式的人都不会有这个问题,因为它会无声地失败.如果转储失败导致Rails 4中的重构正确引发错误导致db:migrate在Heroku上引发错误.但是,即使它与rake abortedddl的错误实际上已执行并已提交.
可能的解决方案:
由于您不关心生产中的结构转储,因此将schema_format设置为ruby.在config/environments/production.rb:
config.active_record.schema_format = :ruby
Run Code Online (Sandbox Code Playgroud)如果由于某种原因您不想更改配置文件:使用以下内容添加rake任务以禁止错误:
if Rails.env == 'production'
Rake::Task["db:structure:dump"].clear
end
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
5341 次 |
| 最近记录: |