当我尝试做rake db:migrate时,我收到一个错误:ActiveRecord :: NODatabaseError role" ubuntu"不存在

时间:2015-11-04 19:20:59

标签: ruby-on-rails ruby postgresql activerecord

我通过这样做启动了postgresql服务器:

sudo service postgresql start

然后我连接到服务:

sudo sudo -u postgres psql

然后我创建了一个数据库(我试图在我的应用程序中添加投票系统):

postgres=# CREATE DATABASE "votes";

但我仍有同样的问题。

另外,当我这样做时

rake db:create

我得到了一个角色" ubuntu"不存在错误

这是我的database.yml:

# SQLite version 3.x
#   gem install sqlite3
#
#   Ensure the SQLite 3 gem is defined in your Gemfile
#   gem 'sqlite3'
#
# default: &default
#   adapter: sqlite3
#   pool: 5
#   timeout: 5000

# development:
#   <<: *default
#   database: db/development.sqlite3

# # 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:
#   <<: *default
#   database: db/test.sqlite3

# production:
#   <<: *default
#   database: db/production.sqlite3

# FOR HEROKU -- POSTGRES DB SETUP
# UNCOMMENT WHEN WORKING LOCALLY.
development:
  adapter: postgresql
  database: votes
  pool: 5
  timeout: 5000
  username: ubuntu

test:
  adapter: postgresql
  database: planit_test
  pool: 5
  timeout: 5000


# production:
#   <<: *default
#   database: db/production.sqlite3

我试图创建一个ubuntu rold:

$ sudo sudo -u postgres psql
psql (9.3.10)
Type "help" for help.

postgres=# CREATE ROLE ubuntu SUPERUSER
postgres-# \q
$ rake db:migrate
rake aborted!
ActiveRecord::NoDatabaseError: FATAL:  role "ubuntu" does not exist

2 个答案:

答案 0 :(得分:2)

您收到的关于role "ubuntu" does not exist的错误是由于您尝试使用该用户(或role)从应用访问您的postgress会话。

指定database.yml

development:
  adapter: postgresql
  database: votes
  pool: 5
  timeout: 5000
  username: ubuntu

注意最后一行:username: ubuntu

您可以采取以下两种方式:

1)删除该行(也许将其注释掉) - 这将使您的应用程序使用默认的设置名称(或role连接到您的postgress会话,因为您可能想要调用它)。默认情况下,大多数时间都是postgress或您计算机上的用户名。

2)为你的postgress创建角色ubuntu。为此,您可以check out this answer.

上述两种方法中的任何一种都应该适合你。

答案 1 :(得分:0)

使用postgres,它是Postgre的默认角色。或者尝试这个:

// Place your Spring DSL code here
beans = {

  dataSource_defaultClientDb(org.apache.commons.dbcp.BasicDataSource) { bean ->
    bean.singleton = true
    driverClassName = 'com.mysql.jdbc.Driver'
    username = '${defaultClientDB_username}'
    password = '${defaultClientDB_password}'
    url = '${defaultClientDB_url}'
  }

  dataSource_clientdb(SwitchableDataSource){ bean ->
    bean.singleton = true 
    _targetDataSources = ["DEFAULT_DATASOURCE":ref("dataSource_defaultClientDb")]
    targetDataSources = _targetDataSources
  }

  lobHandlerDetector_clientdb(org.springframework.jdbc.support.lob.DefaultLobHandler)

}

然后

    sudo su - postgres
    psql template1

您可以使用命令检查角色是否存在:

    CREATE ROLE ubuntu superuser createdb login;