sim*_*imo 137 postgresql ruby-on-rails-3 ruby-on-rails-3.1 ubuntu-11.10
我在Ubuntu 11.10和RubyMine上运行我的开发
这是我对database.yml的开发设置:RubyMine为我创建的
development:
adapter: postgresql
encoding: unicode
database: mydb_development
pool: 5
username: myuser
password:
Run Code Online (Sandbox Code Playgroud)
当我尝试运行应用程序时,我在下面收到此错误,似乎我还没有创建"项目"用户,但是,我如何创建用户并在postgres中为其授予数据库?如果这是问题,那么,在Ubuntu中为此任务使用的推荐工具是什么?如果这不是问题,那么,请指教.
Exiting
/home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:1194:in `initialize': FATAL: Peer authentication failed for user "project" (PG::Error)
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:1194:in `new'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:1194:in `connect'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:329:in `initialize'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:28:in `new'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:28:in `postgresql_connection'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:303:in `new_connection'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:313:in `checkout_new_connection'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:237:in `block (2 levels) in checkout'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:232:in `loop'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:232:in `block in checkout'
from /home/sam/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/monitor.rb:211:in `mon_synchronize'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:229:in `checkout'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:95:in `connection'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:398:in `retrieve_connection'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_specification.rb:168:in `retrieve_connection'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_specification.rb:142:in `connection'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/model_schema.rb:308:in `clear_cache!'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activerecord-3.2.3/lib/active_record/railtie.rb:91:in `block (2 levels) in <class:Railtie>'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/callbacks.rb:418:in `_run__757346023__prepare__404863399__callbacks'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/callbacks.rb:405:in `__run_callback'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/callbacks.rb:385:in `_run_prepare_callbacks'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/callbacks.rb:81:in `run_callbacks'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/actionpack-3.2.3/lib/action_dispatch/middleware/reloader.rb:74:in `prepare!'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/actionpack-3.2.3/lib/action_dispatch/middleware/reloader.rb:48:in `prepare!'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/application/finisher.rb:47:in `block in <module:Finisher>'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/initializable.rb:30:in `instance_exec'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/initializable.rb:30:in `run'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/initializable.rb:55:in `block in run_initializers'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/initializable.rb:54:in `each'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/initializable.rb:54:in `run_initializers'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/application.rb:136:in `initialize!'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/railtie/configurable.rb:30:in `method_missing'
from /home/sam/RubymineProjects/project/config/environment.rb:5:in `<top (required)>'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:251:in `require'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:251:in `block in require'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:236:in `load_dependency'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:251:in `require'
from /home/sam/RubymineProjects/project/config.ru:4:in `block in <main>'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/builder.rb:51:in `instance_eval'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/builder.rb:51:in `initialize'
from /home/sam/RubymineProjects/project/config.ru:1:in `new'
from /home/sam/RubymineProjects/project/config.ru:1:in `<main>'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/builder.rb:40:in `eval'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/builder.rb:40:in `parse_file'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/server.rb:200:in `app'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/commands/server.rb:46:in `app'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/server.rb:301:in `wrapped_app'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/rack-1.4.1/lib/rack/server.rb:252:in `start'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/commands/server.rb:70:in `start'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/commands.rb:55:in `block in <top (required)>'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/commands.rb:50:in `tap'
from /home/sam/.rvm/gems/ruby-1.9.3-p0@project/gems/railties-3.2.3/lib/rails/commands.rb:50:in `<top (required)>'
from /home/sam/RubymineProjects/project/script/rails:6:in `require'
from /home/sam/RubymineProjects/project/script/rails:6:in `<top (required)>'
from -e:1:in `load'
from -e:1:in `<main>'
Process finished with exit code 1
Run Code Online (Sandbox Code Playgroud)
Ben*_*dan 299
如果您在服务器上安装了postresql,那么只需托管:localhost到database.yml,我通常会将它放在它所说的pool周围:5.否则如果不是localhost肯定告诉应用程序在哪里找到它的数据库.
development:
adapter: postgresql
encoding: unicode
database: kickrstack_development
host: localhost
pool: 5
username: kickrstack
password: secret
Run Code Online (Sandbox Code Playgroud)
通过创建数据库并为应用程序的用户分配所有权以建立连接,确保正确设置了用户凭据.要在postgresql 9中创建新用户,请运行:
sudo -u postgres psql
Run Code Online (Sandbox Code Playgroud)
如果你没有设置postgresql用户密码,它只是反斜杠密码.
postgres=# \password
Run Code Online (Sandbox Code Playgroud)
创建新用户和密码以及用户的新数据库:
postgres=# create user "guy_on_stackoverflow" with password 'keepitonthedl';
postgres=# create database "dcaclab_development" owner "guy_on_stackoverflow";
Run Code Online (Sandbox Code Playgroud)
现在,在确认创建数据库,用户,密码并设置这些权限后,请更新database.yml文件.不要忘记host:localhost.
Sta*_*ers 53
这是让你的rails应用程序在Ubuntu 13.10 的开发环境中使用postgres最简单的方法.
1)在Gemfile中使用postgres YAML和'pg'gem创建rails应用程序:
$ rails new my_application -d postgresql
Run Code Online (Sandbox Code Playgroud)
2)给它一些CRUD功能.如果您只是看到postgres是否有效,请创建一个脚手架:
$ rails g scaffold cats name:string age:integer colour:string
Run Code Online (Sandbox Code Playgroud)
3)从rails 4.0.1该-d postgresql选项开始生成不包含主机参数的YAML.我发现我需要这个.编辑开发部分并创建以下参数:
encoding: UTF-8
host: localhost
database: my_application_development
username: thisismynewusername
password: thisismynewpassword
Run Code Online (Sandbox Code Playgroud)
请注意,该database参数适用于尚未退出的数据库,而且是username和password不存在的角色的凭据.我们稍后会创建它们!
这是config/database.yml应该怎么看(在copypasting中没有羞耻:D):
development:
adapter: postgresql
pool: 5
# these are our new parameters
encoding: UTF-8
database: my_application_development
host: localhost
username: thisismynewusername
password: thisismynewpassword
test:
# this won't work
adapter: postgresql
encoding: unicode
database: my_application_test
pool: 5
username: my_application
password:
production:
# this won't work
adapter: postgresql
encoding: unicode
database: my_application_production
pool: 5
username: my_application
password:
Run Code Online (Sandbox Code Playgroud)
4)使用以下命令启动postgres shell:
$ psql
Run Code Online (Sandbox Code Playgroud)
4a)如果您当前的用户(如在您的计算机用户中)没有相应的管理postgres角色,则可能会出现此错误.
psql: FATAL: role "your_username" does not exist
Run Code Online (Sandbox Code Playgroud)
现在我只安装了一次postgres,所以我可能在这里错了,但我认为postgres会自动创建一个管理角色,其凭据与你安装postgres的用户相同.
4b)所以这意味着您需要更改为安装postgres的用户以使用psql命令并启动shell:
$ sudo su postgres
Run Code Online (Sandbox Code Playgroud)
然后运行
$ psql
Run Code Online (Sandbox Code Playgroud)
5)你会知道你在postgres shell中因为你的终端看起来像这样:
$ psql
psql (9.1.10)
Type "help" for help.
postgres=#
Run Code Online (Sandbox Code Playgroud)
6)使用PostgreSQL的语法,让我们创建我们指定的用户config/database.yml的发展部分:
postgres=# CREATE ROLE thisismynewusername WITH LOGIN PASSWORD 'thisismynewpassword';
Run Code Online (Sandbox Code Playgroud)
现在,这里有一些细微之处,让我们来看看它们.
您应该在终端中看到这个:
postgres=#
CREATE ROLE
postgres=#
Run Code Online (Sandbox Code Playgroud)
这意味着,"ROLE CREATED",但postgres'警报似乎采用了与git hub相同的命令式约定.
7)现在,仍然在postgres shell中,我们需要使用我们在YAML中设置的名称创建数据库.让我们在步骤6中创建的用户成为其所有者:
postgres=# CREATE DATABASE my_application_development OWNER thisismynewusername;
Run Code Online (Sandbox Code Playgroud)
你会知道你是否成功,因为你会得到输出:
CREATE DATABASE
Run Code Online (Sandbox Code Playgroud)
8)退出postgres shell:
\q
Run Code Online (Sandbox Code Playgroud)
9)现在是真相的时刻:
$ RAILS_ENV=development rake db:migrate
Run Code Online (Sandbox Code Playgroud)
如果你得到这个:
== CreateCats: migrating =================================================
-- create_table(:cats)
-> 0.0028s
== CreateCats: migrated (0.0028s) ========================================
Run Code Online (Sandbox Code Playgroud)
恭喜,postgres与您的应用程序完美配合.
9a)在我的本地计算机上,我一直收到权限错误.我不记得确切,但这是一个错误
Can't access the files. Change permissions to 666.
Run Code Online (Sandbox Code Playgroud)
虽然我建议非常仔细地考虑在生产机器上递归设置写入特权,在本地,我给了我的整个应用程序读写权限,如下所示:
9b)爬上一个目录级别:
$ cd ..
Run Code Online (Sandbox Code Playgroud)
9c)将my_application目录及其所有内容的权限设置为666:
$ chmod -R 0666 my_application
Run Code Online (Sandbox Code Playgroud)
9d)再次运行迁移:
$ RAILS_ENV=development rake db:migrate
== CreateCats: migrating =================================================
-- create_table(:cats)
-> 0.0028s
== CreateCats: migrated (0.0028s) ========================================
Run Code Online (Sandbox Code Playgroud)
如果你搞砸了一些提示和技巧
在重新启动所有这些步骤之前尝试这些:
mynewusername用户没有CRUD到my_app_development数据库的权限?删除数据库并使用mynewusername作为所有者再次创建它:
1)启动postgres shell:
$ psql
Run Code Online (Sandbox Code Playgroud)
2)删除my_app_development数据库.小心!丢弃意味着彻底删除!
postgres=# DROP DATABASE my_app_development;
Run Code Online (Sandbox Code Playgroud)
3)重新创建另一个my_app_development并使mynewusername成为所有者:
postgres=# CREATE DATABASE my_application_development OWNER mynewusername;
Run Code Online (Sandbox Code Playgroud)
4)退出shell:
postgres=# \q
Run Code Online (Sandbox Code Playgroud)
该mynewusername用户不能登录到数据库?认为您在YAML中写了错误的密码,并且不记得您使用postgres shell输入的密码?只需使用YAML密码更改角色:
1)打开你的YAML,并将密码复制到剪贴板:
development:
adapter: postgresql
pool: 5
# these are our new parameters
encoding: UTF-8
database: my_application_development
host: localhost
username: thisismynewusername
password: musthavebeenverydrunkwheniwrotethis
Run Code Online (Sandbox Code Playgroud)
2)启动postgres shell:
$ psql
Run Code Online (Sandbox Code Playgroud)
3)更新mynewusername密码.粘贴密码,并记住在其周围放置单引号:
postgres=# ALTER ROLE mynewusername PASSWORD `musthavebeenverydrunkwheniwrotethis`;
Run Code Online (Sandbox Code Playgroud)
4)退出shell:
postgres=# \q
Run Code Online (Sandbox Code Playgroud)
试图通过数据库查看器(如Dbeaver)连接到localhost,并且不知道你的postgres用户的密码是什么?像这样改变它:
1)passwd以超级用户身份运行:
$ sudo passwd postgres
Run Code Online (Sandbox Code Playgroud)
2)输入您的帐户密码sudo(与postgres无关):
[sudo] password for starkers: myaccountpassword
Run Code Online (Sandbox Code Playgroud)
3)创建postgres帐户的新密码:
Enter new UNIX password: databasesarefun
Retype new UNIX password: databasesarefun
passwd: password updated successfully
Run Code Online (Sandbox Code Playgroud)
收到此错误消息?:
Run `$ bin/rake db:create db:migrate` to create your database
$ rake db:create db:migrate
PG::InsufficientPrivilege: ERROR: permission denied to create database
Run Code Online (Sandbox Code Playgroud)
4)您需要为您的用户提供创建数据库的能力.从psql shell:
ALTER ROLE thisismynewusername WITH CREATEDB
Run Code Online (Sandbox Code Playgroud)
Sum*_*not 29
永久解决方案:
问题在于你的pg_hba.这一行:
local all postgres peer
Run Code Online (Sandbox Code Playgroud)
应该
local all postgres md5
Run Code Online (Sandbox Code Playgroud)
然后在更改此文件后重新启动postgresql服务器.
如果你在Linux上,命令就是
sudo service postgresql restart
Run Code Online (Sandbox Code Playgroud)
小智 9
我在Ubuntu机器上面临同样的问题,所以我按照一些步骤删除了这个错误.切换到postgres用户
postgres
它会要求输入密码,默认密码为 postgres user
将用户切换到postgres后,打开psql控制台
$ sudo su - postgres
Run Code Online (Sandbox Code Playgroud)
所以如果有多个版本可用,请检查postgres的版本
$ psql
Run Code Online (Sandbox Code Playgroud)
现在打开 9.1
postgres
postgres user 是版本返回表单上部命令
并替换
psql=# select VERSION();
PostgreSQL 9.1.13 on x86_64-unk.... # so version is 9.1
Run Code Online (Sandbox Code Playgroud)
至
vim /etc/postgresql/9.1/main/pg_hba.conf
Run Code Online (Sandbox Code Playgroud)
9.1
我也在博客上写了一些步骤
http://tarungarg402.blogspot.in/2014/10/set-up-postgresql-on-ubuntu.html
小智 5
您可以转到/var/lib/pgsql/data/pg_hba.conf文件并添加信任代替Ident它对我有用.
local all all trust
host all 127.0.0.1/32 trust
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅此问题. 对用户身份验证失败
添加host: localhost对我来说是神奇的
development:
adapter: postgresql
database: database_name_here
host: localhost
username: user_name_here
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
102229 次 |
| 最近记录: |