rake db:structure:在PostgreSQL/Rails 3.2下转储失败

Ort*_*ntz 4 postgresql rake ruby-on-rails ruby-on-rails-3.2

我收到此错误消息:

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)

这曾经在Rails 3.1下工作.我正在使用Rails 3.2.3和PostgreSQL 9.0.5.db:migrate或db:rollback等其他任务工作正常.

dbe*_*hur 7

pg_dump命令在第428行的activerecord/lib/active_record/railties/databases.rake中执行.

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

尝试在那里设置断点并查看正在运行的实际命令.

所有这些选项都适用于Pg9.0.x,所以我怀疑有一些有趣的东西abcs[Rails.env]['schema_search_path']混淆了psql的选项解析.注意search_path构造不引用--schema参数,因此search_path_part带有嵌入空格的a将解析为部分模式名称后跟一个前面没有选项的单词,因此psql会将其解释为数据库名称,然后在它出现时进行抱怨稍后获取真实的数据库名称.


Ort*_*ntz 5

感谢dbenhur,我发现了这个问题.我的文件名路径中有一个空格.更改线路392 activerecord/lib/active_record/railties/databases.rake

pg_dump -i -s -x -O -f '#{filename}' #{search_path} #{abcs[Rails.env]['database']}
Run Code Online (Sandbox Code Playgroud)

(添加单引号#{filename})修复了问题.