我正在Ubuntu 11.10和RubyMine上运行我的开发
这是我对database.yml的开发设置:RubyMine为我创建的设置
development:
adapter: postgresql
encoding: unicode
database: mydb_development
pool: 5
username: myuser
password:
[当我尝试运行该应用程序时,出现以下错误,似乎我还没有创建'project'用户,但是,如何在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
如果您在服务器上安装了postresql,则仅将host:localhost托管到database.yml,我通常将其放置在其显示pool:5的地方。否则,如果不是localhost,则肯定告诉该应用程序在哪里找到其数据库。
development:
adapter: postgresql
encoding: unicode
database: kickrstack_development
host: localhost
pool: 5
username: kickrstack
password: secret
通过创建数据库并将所有权分配给您的应用程序用户以建立连接,确保正确设置了您的用户凭据。要在postgresql 9中创建新用户,请运行:
sudo -u postgres psql
如果没有,请设置postgresql用户密码,这只是反斜杠密码。
postgres=# \password
创建新用户和密码以及用户的新数据库:
postgres=# create user "guy_on_stackoverflow" with password 'keepitonthedl';
postgres=# create database "dcaclab_development" owner "guy_on_stackoverflow";
在确认创建数据库,用户,密码并设置了这些特权后,现在更新您的database.yml文件。不要忘记主机:localhost。
这是在Ubuntu 13.10的开发环境中使Rails应用程序与postgres一起使用的最简单的方法。
1)在Gemfile中使用postgres YAML和'pg'gem创建Rails应用程序:
$ rails new my_application -d postgresql
2)给它一些CRUD功能。如果您只是想看看postgres是否有效,请创建一个脚手架:
$ rails g scaffold cats name:string age:integer colour:string
3)从rails 4.0.1
开始,-d postgresql
选项会生成不包含主机参数的YAML。 [我发现我需要这个。编辑开发部分并创建以下参数:
encoding: UTF-8
host: localhost
database: my_application_development
username: thisismynewusername
password: thisismynewpassword
注意database
参数用于尚未退出的数据库,username
和password
是也不存在的角色的凭据。我们稍后将创建它们!
这是config/database.yml
的外观(在复制粘贴中不丢脸: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:
4)使用以下命令启动postgres shell:
$ psql
4a)如果您当前的用户(如您的计算机用户)没有相应的管理postgres角色,则可能会出现此错误。
psql: FATAL: role "your_username" does not exist
现在我只安装了一次postgres,所以在这里我可能错了,但是我认为postgres会自动创建一个管理角色,其凭据与安装postgres的用户相同。
4b)因此,这意味着您需要更改为安装postgres的用户才能使用psql命令并启动Shell:
$ sudo su postgres
然后运行
$ psql
5)您将知道您在postgres shell中,因为您的终端将如下所示:
$ psql
psql (9.1.10)
Type "help" for help.
postgres=#
6)使用postgresql语法,让我们创建在config/database.yml
的development部分中指定的用户:
postgres=# CREATE ROLE thisismynewusername WITH LOGIN PASSWORD 'thisismynewpassword';
[现在,这里有一些微妙之处,让我们来看一下。
postgres=#
CREATE ROLE
postgres=#
这意味着,“角色已创建”,但postgres的警报似乎采用了git hub相同的命令式约定。7)现在,仍然在postgres shell中,我们需要使用在YAML中设置的名称创建数据库。使我们在第6步中创建的用户成为所有者:
postgres=# CREATE DATABASE my_application_development OWNER thisismynewusername;
您会知道您是否成功,因为您将获得输出:
CREATE DATABASE
8)退出postgres shell:
\q
9)现在是关键时刻:
$ RAILS_ENV=development rake db:migrate
如果得到这个:
== CreateCats: migrating ================================================= -- create_table(:cats) -> 0.0028s == CreateCats: migrated (0.0028s) ========================================
恭喜,postgres与您的应用完美配合。
9a)在我的本地计算机上,我一直收到权限错误。我记不清了,但是
Can't access the files. Change permissions to 666.
尽管我建议在本地在生产机器上递归设置写特权时要非常仔细地考虑,但我为整个应用程序授予了这样的写特权:9b)爬升一个目录级别:
$ cd ..
9c)将my_application目录及其所有内容的权限设置为666:
$ chmod -R 0666 my_application
9d)并再次运行迁移:
$ RAILS_ENV=development rake db:migrate == CreateCats: migrating ================================================= -- create_table(:cats) -> 0.0028s == CreateCats: migrated (0.0028s) ========================================
如果您捣毁了一些技巧和窍门
重新启动所有这些步骤之前,请尝试以下操作:mynewusername用户不具有对
1)启动postgres shell:my_app_development
数据库进行CRUD的权限吗?删除数据库,然后以mynewusername作为所有者再次创建它:
$ psql
2)删除my_app_development
数据库。小心!删除意味着完全删除!
postgres=# DROP DATABASE my_app_development;
3)重新创建另一个my_app_development
,并将mynewusername设置为所有者:
postgres=# CREATE DATABASE my_application_development OWNER mynewusername;
4)退出外壳:
postgres=# \q
1)打开您的YAML,然后将密码复制到剪贴板:
mynewusername
用户无法登录数据库?认为您在YAML中输入了错误的密码,还不太记得使用postgres shell输入的密码吗?只需使用YAML密码更改角色即可:
development: adapter: postgresql pool: 5 # these are our new parameters encoding: UTF-8 database: my_application_development host: localhost username: thisismynewusername password: musthavebeenverydrunkwheniwrotethis
2)启动postgres shell:
$ psql
3)更新mynewusername
的密码。粘贴密码,并记住在密码两边加上单引号:
postgres=# ALTER ROLE mynewusername PASSWORD `musthavebeenverydrunkwheniwrotethis`;
4)退出外壳:
postgres=# \q
试图通过数据库查看器(例如Dbeaver)连接到localhost,不知道您的postgres用户密码是什么?像这样更改它:
1)以超级用户身份运行passwd
:
$ sudo passwd postgres
2)输入sudo
的帐户密码(与postgres无关):
[sudo] password for starkers: myaccountpassword
3)创建postgres帐户的新密码:
Enter new UNIX password: databasesarefun Retype new UNIX password: databasesarefun passwd: password updated successfully
是否收到此错误消息?:
Run `$ bin/rake db:create db:migrate` to create your database $ rake db:create db:migrate PG::InsufficientPrivilege: ERROR: permission denied to create database
4)您需要使您的用户能够创建数据库。从psql shell:
ALTER ROLE thisismynewusername WITH CREATEDB
问题出在您的pg_hba。这行:
local all postgres peer
应该是
local all postgres md5
然后在更改此文件后重新启动您的Postgresql服务器。如果您使用的是Linux,则命令为
sudo service postgresql restart
$ sudo su - postgres
它将要求输入密码,默认情况下,密码为postgres
将用户切换到postgres之后,打开psql控制台
$ psql
如果有多个版本,请检查postgres的版本
psql=# select VERSION(); PostgreSQL 9.1.13 on x86_64-unk.... # so version is 9.1
现在打开postgres user
vim /etc/postgresql/9.1/main/pg_hba.conf
[9.1
是版本返回格式的上命令并替换
local all postgres peer
to
local all postgres md5
重新启动服务
sudo service postgresql restart
我也在博客上写了步骤http://tarungarg402.blogspot.in/2014/10/set-up-postgresql-on-ubuntu.html
local all all trust
host all 127.0.0.1/32 trust
有关更多详细信息,请参阅此问题Ident authentication failed for user
host: localhost
是我的魔力development:
adapter: postgresql
database: database_name_here
host: localhost
username: user_name_here
Peer authentication failed for user (PG::Error)
),请确保测试数据库存在。host: localhost
文件中留下了config/database.yml
的注释。 所以我的应用程序无法连接到PostgreSQL数据库,只需取消注释即可解决问题。
development:
<<: *default
database: database_name
username: database_username
password: database_password
host: localhost
就这些。我希望这会有所帮助