rake db:migrate失败

时间:2012-04-01 11:50:28

标签: ruby-on-rails rake abort

我刚刚开始学习Rails。 当我尝试“rake db:migrate”时,发生以下错误。

  耙子流产了!   致命:用户“kt1”的对等身份验证失败

似乎database.yml有问题,但我不知道如何解决。 请给我一个建议。


非常感谢您的评论和编辑。我正在使用postgresql(0.13.2)。我的环境如下。 Ubuntu 11.10 Ruby 1.8.7 Rails 3.2.3 宝石1.8.21

database.yml如下。


# PostgreSQL. Versions 8.2 and up are supported.
#
# Install the pg driver:
#   gem install pg
# On Mac OS X with macports:
#   gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config
# On Windows:
#   gem install pg
#       Choose the win32 build.
#       Install PostgreSQL and put its /bin directory on your path.
#
# Configure Using Gemfile
# gem 'pg'
#
development:
  adapter: postgresql
  encoding: unicode
  database: kt1_development
  pool: 5
  username: kt1
  password:

  # Connect on a TCP socket. Omitted by default since the client uses a
  # domain socket that doesn't need configuration. Windows does not have
  # domain sockets, so uncomment these lines.
  #host: localhost
  #port: 5432

  # Schema search path. The server defaults to $user,public
  #schema_search_path: myapp,sharedapp,public

  # Minimum log levels, in increasing order:
  #   debug5, debug4, debug3, debug2, debug1,
  #   log, notice, warning, error, fatal, and panic
  # The server defaults to notice.
  #min_messages: warning

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  adapter: postgresql
  encoding: unicode
  database: kt1_test
  pool: 5
  username: kt1
  password:

production:
  adapter: postgresql
  encoding: unicode
  database: kt1_production
  pool: 5
  username: kt1
  password:

我也尝试使用空白的用户名。然后错误来了

rake aborted!
FATAL:  role "kenji" does not exist

(kenji是我在Ubuntu上的用户名。)

4 个答案:

答案 0 :(得分:8)

尝试像这样修改您的(/etc/postgresql/9.1/main/pg_hba.conf文件,将本地用户的方法从对等方更改为信任方。

# Database administrative login by UNIX sockets
local   all         postgres                          trust

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

# "local" is for Unix domain socket connections only
local   all         all                               trust
# IPv4 local connections:
host    all         all         127.0.0.1/32          md5
# IPv6 local connections:
host    all         all         ::1/128               md5

答案 1 :(得分:3)

您需要先create the user kt1,然后create the database并授予用户权限。

有一种方法可以让rails创建用户和数据库,但是在postgresql中,最好是手工完成(恕我直言)

答案 2 :(得分:0)

查看你的database.yml文件,里面会有数据库适配器,可能是数据库名,用户名和密码。

适配器告诉您使用的是哪个数据库系统,sqllite3,mysql2,无论

查看是否可以使用database.yml中包含的用户名和密码手动连接到该数据库系统。找到正确的用户名和密码进行手动连接后,请更新database.yml并进行任何更改,然后重试。

答案 3 :(得分:0)

当应用程序是使用sqlite构建时,会发生这种情况,然后移植到Postgres以便在Heroku上托管。

运行rake db:migrate会给你以下错误

PGError (FATAL: role "rails" does not exist ): error message.

并且rspec spec /和rake黄瓜失败并出现类似错误。

以下步骤似乎可以解决问题:

以超级用户身份创建rails: createuser -s rails (注意:如果您没有将自己设置为数据库超级用户,则需要指定一个不同的数据库用户来执行此操作。对我来说,这是createuser -s rails -U postgres)

使用database.yml中指定的所有者rails创建数据库:

createdb -O rails kt1(与步骤1中一样,如果您需要指定其他数据库用户来执行此操作,请添加-U)

在此rake db:migrate之后,rspec spec /和rake cucumber应该成功运行。