Ubuntu 11.10とRubyMineで開発を実行しています
Database.ymlの開発設定は次のとおりです。RubyMineが作成しました
development:
adapter: postgresql
encoding: unicode
database: mydb_development
pool: 5
username: myuser
password:
アプリを実行しようとすると、以下のエラーが表示されます。まだ「プロジェクト」ユーザーを作成していないようですが、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 to database.ymlをインストールした場合、私は通常、pool:5という場所にそれをスローします。
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ファイルを更新し、これらの権限を設定します。 Host:localhostを忘れないでください。
これはRailsアプリをdevelopment environmentでpostgresで動作させる最も確実な方法ですUbuntu 13.10。
1)Gemfileにpostgres YAMLと 'pg' gemを使用してRailsアプリを作成します。
$ Rails new my_application -d postgresql
2)いくつかのCRUD機能を提供します。 postgresが機能するかどうかだけを確認している場合は、scaffoldを作成します。
$ Rails g scaffold cats name:string age:integer colour:string
3)Rails 4.0.1
現在、-d postgresql
オプションは、Hostパラメーターを含まない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シェルを起動します。
$ psql
4a)現在のユーザー(コンピューターユーザーなど)に対応する管理postgresロールがない場合、このエラーが発生する可能性があります。
psql: FATAL: role "your_username" does not exist
今ではpostgresを一度しかインストールしていないので、ここで間違っているかもしれませんが、postgresをインストールしたユーザーと同じクレデンシャルで管理ロールを自動的に作成すると思います。
4b)つまり、psqlコマンドを使用してシェルを起動するには、postgresをインストールしたユーザーに変更する必要があります。
$ Sudo su postgres
そして、実行します
$ psql
5)ターミナルは次のようになるため、postgresシェルにいることがわかります。
$ 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ハブと同じ必須の規則を採用しているようです。
7)まだpostgresシェルで、YAMLで設定した名前でデータベースを作成する必要があります。手順6で作成したユーザーを所有者にします。
postgres=# CREATE DATABASE my_application_development OWNER thisismynewusername;
出力を取得するため、成功したかどうかがわかります。
CREATE DATABASE
8)postgresシェルを終了します。
\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)1つ上のディレクトリレベルに登る:
$ 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ユーザーはmy_app_development
データベースにCRUDする権限を持っていませんか?データベースを削除して、mynewusernameを所有者として再度作成します:
1)postgresシェルを開始します。
$ 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
mynewusername
ユーザーはデータベースにログインできませんか?YAMLに間違ったパスワードを書いたと思います。postgresシェルを使用して入力したパスワードを覚えていないでしょうか?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
2)postgresシェルを開始します。
$ 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シェルから:
ALTER ROLE thisismynewusername WITH CREATEDB
永続的なソリューションの場合:
問題はpg_hbaにあります。この行:
local all postgres peer
あるべき
local all postgres md5
このファイルを変更した後、postgresqlサーバーを再起動します。
Linuxを使用している場合、コマンドは
Sudo service postgresql restart
Ubuntuマシンでも同じ問題に直面していたので、いくつかの手順に従ってこのエラーを削除しました。 postgresユーザーに切り替える
$ 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
に
local all postgres md5
Sudo service postgresql restart
ブログにも手順を書いています
http://tarungarg402.blogspot.in/2014/10/set-up-postgresql-on-ubuntu.html
/var/lib/pgsql/data/pg_hba.confファイルに移動し、Ident Itの代わりに信頼を追加できます。
local all all trust
Host all 127.0.0.1/32 trust
詳細については、この問題を参照してください ユーザーの識別認証に失敗しました
「Host:locahost」を追加することは私にとって魔法でした
development:
adapter: postgresql
database: database_name_here
Host: localhost
username: user_name_here
単体テストの実行中にエラーメッセージ(Peer authentication failed for user (PG::Error)
)が表示される場合は、テストデータベースが存在することを確認してください。