任何与数据库相关的rake任务都有“无数据库”错误

时间:2011-06-11 13:19:28

标签: ruby-on-rails database postgresql rake

`postgresql_connection':没有指定数据库。缺少参数:数据库。 (引发ArgumentError)

我使用Homebrew安装了postgresql,并且能够使用我的本地用户名作为posgresql帐户从命令行成功连接。但是,在运行任何与数据库相关的rake任务时,我得到了上述错误,而我似乎无法弄清楚原因。

这是我的database.yml。 https://gist.github.com/3177f1f6b90a69e3829a

3 个答案:

答案 0 :(得分:3)

不确定它是否只是粘贴错误,但是通过适配器缩进编码,主机,池等可能会导致问题。 YAML具有空格感知,并假设它们嵌套在适配器下。

答案 1 :(得分:1)

我在Rails 3.1项目中遇到了这个问题。在Rails 3.1之前完全解析的干YML(由许多指南推荐)不再有效。 Rails 3.1将yml解析器从'syck'转换为'psych'。

此更改的后果之一 - 可能未知的更改为Rails 3.1验证database.yml - 是Eric M.正在使用的规范DRY rails配置触发“Missing argument:database”错误,因为:设置被视为rails环境,因此它无法通过验证,因为它不包含数据库的值。您可以通过创建任意环境,遗漏数据库字段,以及运行rake db:version或任何数据库敏感命令的问题来产生相同的错误。

有许多可能的解决方法(按照我的偏好顺序):

  1. 废弃设置部分并将您的开发环境用作 变量替换的模型,覆盖了字段 不同的测试和生产。有了这个设置,你就可以了 rails期望的环境,它们都在负载上正确验证 用耙子,你仍然会得到一个非常干燥的设置。 https://gist.github.com/1242642
  2. 将虚拟数据库引用添加到公共引用an 将获得的现有数据库https://gist.github.com/1242623 被任何特定数据库覆盖:在其他配置文件中进行设置。 这将使“设置”成为一个有效的环境,尽管这是下一个环境 明确使用。
  3. 将Rails 3.1还原为旧的YAML解析引擎。我没有对此进行过测试,但有几个博客文章声称它有效,但当然令人不快的副作用是你强迫Rails使用旧的引擎,这可能是出于某些原因而被丢弃。请参阅示例Batcode Blog with Rails 3.1 error and workaround。建议的步骤是将YAML::ENGINE.yamler = "syck"设置在application.rb的顶部。您可能需要先require 'yaml'
  4. 我在Rails 3.1应用程序中使用第一个解决方案没有任何问题。感谢Eric M.提出这个问题(不确定你是否有一个Rails 3.1应用程序或只是一些文本gremlins,因为颠倒了为你工作但不适合我的订单)。

答案 2 :(得分:0)

我想到了一些事情。

  1. 确保'pg'gem在您的Gemfile中
  2. 确保您已运行bundle install,并验证是否已安装pg gem
  3. 确保已通过rake db:create
  4. 创建数据库
  5. 登录pg并验证数据库emorg_development是否存在
  6. 可能不是一个绝对的解决方案,但这将有助于缩小问题的来源。