新Rails安装:ActiveRecord :: NoDatabaseError FATAL:角色不存在

use*_*340 5 ruby windows postgresql ruby-on-rails

Rails的新手,并试图让一个本地开发环境启动并运行一个克隆了git的网站.

当我启动postgres并在我的项目下的终端中输入'rails s'来启动服务器时,我会遇到以下情况:

=> Booting WEBrick
=> Rails 4.2.0 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
[2017-01-08 20:43:24] INFO  WEBrick 1.3.1
[2017-01-08 20:43:24] INFO  ruby 2.2.6 (2016-11-15) [i386-mingw32]
[2017-01-08 20:43:24] INFO  WEBrick::HTTPServer#start: pid=1036 port=3000




Started GET "/" for ::1 at 2017-01-08 20:43:29 -0500
Started GET "/" for ::1 at 2017-01-08 20:43:29 -0500

ActiveRecord::NoDatabaseError (FATAL:  role "username" does not exist
):
Run Code Online (Sandbox Code Playgroud)

如果我试着跑

rake db:create
Run Code Online (Sandbox Code Playgroud)

我收到

FATAL:  role "username" does not exist
C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/activerecord-4.2.0/lib/active_record/connection_adapters/postgresql_adapter.rb:661:in `rescue in
.....
Run Code Online (Sandbox Code Playgroud)

与rake db:migrate基本相同.该站点的所有迁移都位于\ Sites\sitename\sitename\db\migrate中

如果我尝试创建用户

psql -U username
Run Code Online (Sandbox Code Playgroud)

我立刻回来了

psql: FATAL:  role "username" does not exist
Run Code Online (Sandbox Code Playgroud)

整个下午,我一直在为此烦恼.

我在Windows机器上.有任何想法吗?

小智 10

首先,您必须设置数据库并在psql中创建超级用户.转到psql:

sudo -u postgres psql
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用密码创建用户.例如:

create user username with password '12345678';
Run Code Online (Sandbox Code Playgroud)

Rails将在该用户的帮助下管理数据库.所以我们也要创建一个超级用户:

alter user username with superuser;
Run Code Online (Sandbox Code Playgroud)

创建超级用户后,可以从psql退出.必须在/ config/database.yml文件中包含相同的数据:

development:
  <<: *default
  database: database_name
  username: username
  password: '12345678'
Run Code Online (Sandbox Code Playgroud)

在您的应用程序中,repositroy在rake的帮助下创建一个数据库:

rake db:create
Run Code Online (Sandbox Code Playgroud)


小智 3

database.yml同样更新您的。

default: &default
  adapter: postgresql
  encoding: unicode
  pool: 5

development:
  <<: *default
  database: 'some_name'
  username: 'postgres'
  password: 'postgres'
  host: localhost
  port: 5432
Run Code Online (Sandbox Code Playgroud)

Postgresql在安装时默认role: 'postgres'带有Password: 'postgres'. 如果您不想使用它,您可以创建一个角色并授予他们所有权利。

CREATE ROLE new_user WITH CREATEDB CREATEROLE SUPERUSER;
Run Code Online (Sandbox Code Playgroud)

然后database.yml使用新创建的角色更新您的角色。

希望这对您有帮助。