【问题标题】:rake db:structure:dump fails under PostgreSQL / Rails 3.2rake db:structure:dump 在 PostgreSQL / Rails 3.2 下失败
【发布时间】:2012-05-02 04:42:42
【问题描述】:

我收到此错误消息:

pg_dump:太多的命令行参数(首先是“demo_db”) 尝试“pg_dump --help”以获取更多信息。 耙中止! 转储数据库时出错 任务:TOP => db:structure:dump (通过使用 --trace 运行任务查看完整跟踪)

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

【问题讨论】:

标签: ruby-on-rails postgresql rake ruby-on-rails-3.2


【解决方案1】:

pg_dump 命令在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'])}`

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

所有这些选项都对 Pg9.0.x 有效,所以我怀疑 abcs[Rails.env]['schema_search_path'] 中有一些有趣的东西会混淆 psql 的选项解析。请注意search_path 构造不引用--schema 参数,因此带有嵌入空格的search_path_part 将解析为部分模式名称后跟不带选项的单词,因此psql 将解释它作为数据库名称,然后当它得到真正的数据库名称时抱怨。

【讨论】:

  • 谢谢,使用这种技术我发现了错误(文件名周围缺少单引号)。查看我的回复。
【解决方案2】:

我在设置中遇到了与 db:structure:dump 类似的问题。 Rails 3.2.11 + JRuby 1.7.1[1.8 模式] Postgresql 9.1.7.

唯一真正有帮助的是将 activerecord_jdbc_adapter 从版本 1.2.5 降级到 1.2.2。

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

希望对大家有所帮助。

【讨论】:

    【解决方案3】:

    我通过创建一个使用 postgresql 作为数据库 (rails new MyApp -d postgresql) 的新应用程序解决了这个(暗)问题,然后将我所有的旧应用程序文件(/app 文件夹、迁移和一些 /config 文件)移动到新的。现在当我运行 rake db:migrate 时,没有 pg_dump 错误。我希望这对某人有所帮助。

    【讨论】:

      【解决方案4】:

      感谢 dbenhur,我找到了问题所在。我的文件名路径中有一个空格。 将activerecord/lib/active_record/railties/databases.rake 的第 392 行更改为

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

      (在#{filename} 周围添加单引号)解决了这个问题。

      【讨论】:

      • @KonstantinGredeskoul 最新来源在文件名和数据库名称上使用Shellwords.escape(但奇怪的是,不是search_path);所以现在好多了。虽然真正使用带有数组参数的Open3::capture2 通常比Kernel::` 更安全
      • 谢谢,我对给定的字符串进行了研究。对我来说它不起作用,因为 spring 环境中的 PATH 不包含 pg_dump 的路径。
      猜你喜欢
      • 2016-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-18
      • 1970-01-01
      • 2014-04-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多