rake db:structure:dump fails under PostgreSQL / Rails 3.2

让人想犯罪 __ 提交于 2019-12-07 07:08:35

问题


I get this error message:

pg_dump: too many command-line arguments (first is "demo_db")
Try "pg_dump --help" for more information.
rake aborted!
Error dumping database

Tasks: TOP => db:structure:dump
(See full trace by running task with --trace)

This used to work under Rails 3.1. I'm using Rails 3.2.3 and PostgreSQL 9.0.5. Other tasks like db:migrate or db:rollback work just fine.


回答1:


The pg_dump command is executed in activerecord/lib/active_record/railties/databases.rake at line 428.

`pg_dump -i -s -x -O -f #{Shellwords.escape(filename)} #{search_path} #{Shellwords.escape(config['database'])}`

Try setting a breakpoint there and seeing what actual command is being run.

All those options are valid for Pg9.0.x, so I suspect there's something funny in abcs[Rails.env]['schema_search_path'] which confuses psql's option parsing. Note the search_path construction doesn't quote the --schema argument, so a search_path_part with an embedded space will parse as a partial schema name followed by a word which isn't preceded by an option, so psql will interpret it as a database name, then complain when it gets to the real database name later.




回答2:


Thanks to dbenhur I found the issue. I have a space in the path of my filename. Changing line 392 of activerecord/lib/active_record/railties/databases.rake to

pg_dump -i -s -x -O -f '#{filename}' #{search_path} #{abcs[Rails.env]['database']}

(adding the single quotes around #{filename}) fixes the issue.




回答3:


I had a simillar problem with db:structure:dump on my setup. Rails 3.2.11 + JRuby 1.7.1[1.8 mode] Postgresql 9.1.7.

The only thing which really helped was downgrading activerecord_jdbc_adapter from version 1.2.5 to 1.2.2.

gem 'activerecord-jdbc-adapter', '1.2.2'
gem "activerecord-jdbcpostgresql-adapter", '1.2.2'

Hope it will help anybody.




回答4:


I fixed this (dark) issue by creating a new app with postgresql as database (rails new MyApp -d postgresql), and then move all my old app files (/app folder, migrations, and some /config files) to new one. Now when I run rake db:migrate, there are no pg_dump error. I hope this helps someone.



来源:https://stackoverflow.com/questions/10248893/rake-dbstructuredump-fails-under-postgresql-rails-3-2

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!