Cloud9のRailsアプリでpostgresデータベースをセットアップしようとしています。
私はここの指示に従いました: https://docs.c9.io/setting_up_postgresql.html そしてcc_databaseと呼ばれるデータベースをセットアップします。
私のdatabase.ymlファイルは次のようになります:
development:
adapter: postgresql
encoding: SQL_ASCII
database: cc_database
pool: 5
username: postgres
password: password
Rake db:setupを実行すると、次のエラーが発生します。
PG::ConnectionBad: FATAL: Peer authentication failed for user "postgres"
私はこれらすべてにまったく慣れていないので、アドバイスをいただければ幸いです。
次の手順を実行します。
Cloud9でpostgresqlの新しいユーザー名とパスワードを作成します。
$ Sudo service postgresql start
$ Sudo sudo -u postgres psql
postgres=# CREATE USER username SUPERUSER PASSWORD 'password';
postgres=# \q
Cloud9でENV変数を作成します。
$ echo "export USERNAME=username" >> ~/.profile
$ echo "export PASSWORD=password" >> ~/.profile
$ source ~/.profile
私のdatabase.ymlfor Rails 4.2.0 on cloud9:
default: &default
adapter: postgresql
encoding: unicode
pool: 5
username: <%= ENV['USERNAME'] %>
password: <%= ENV['PASSWORD'] %>
Host: <%= ENV['IP'] %>
development:
<<: *default
database: sample_app_development
test:
<<: *default
database: sample_app_test
production:
<<: *default
database: sample_app_production
Gem pg
をGemfileに含めてインストールします。
gem'pg '、'〜> 0.18.2 '
$ bundle install
更新template1 cloud9上のdatabase.ymlのpostgresql:
postgres=# UPDATE pg_database SET datistemplate = FALSE WHERE datname = 'template1';
postgres=# DROP DATABASE template1;
postgres=# CREATE DATABASE template1 WITH TEMPLATE = template0 ENCODING = 'UNICODE';
postgres=# UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'template1';
postgres=# \c template1
postgres=# VACUUM FREEZE;
postgres=# \q
コマンドラインから実行:
bundle exec rake db:create
Cloud9のpostgresqlは、ローカルホスト接続時にピアで認証するように設定されています。したがって、迅速な解決策は、database.yamlのユーザーを現在のユーザーに変更することです。私の場合、ユーザーの名前はubuntuです。現在のユーザーを表示するには、コマンドを使用します
$ echo $USER
したがって、ターミナルのコマンドのリストはです。
$ Sudo su - postgres
$ createuser ubuntu -dslP
$ Enter password for new role: **same password from your yaml file**
$ Enter it again:
Yamlファイルを次のように設定します
development:
adapter: postgresql
encoding: SQL_ASCII
database: cc_database
pool: 5
username: ubuntu
password: password
今、あなたは走ることができます
rake db:create
rake db:migrate
執筆時点では、Cloud9にはPostgreSQLがプリインストールされているため、自分でインストールする必要はありません。ただし、デフォルトでは実行されないため、ターミナルで次のコマンドを使用して起動する必要があります。
Sudo service postgresql start
PostgreSQLのパスワードを「password」に変更します(または別のパスワードを選択します)。
Sudo sudo -u postgres psql
# This will open the psql client.
# Type \password and press enter to begin process
# of changing the password:
postgres=# \password
# Type your new password (e.g. "password") and press enter twice:
Enter new password:
Enter it again:
# Password changed, quit psql with \q
postgres=# \q
config/database.yml
を次のように編集します。
default: &default
adapter: postgresql
encoding: unicode
pool: 5
# Important configs for cloud9, change password value
# to what you entered in the previous psql step.
template: template0
username: ubuntu
password: password
development:
<<: *default
database: your_app_name_development
test:
<<: *default
database: your_app_name_test
production:
<<: *default
database: your_app_name_production
username: your_app_name
password: <%= ENV['YOUR_APP_NAME_DATABASE_PASSWORD'] %>
(上記のtemplate
セクションのusername
、password
、およびdefault
構成は必須であることに注意してください)。
pg
gemをGemfile
に追加します。
gem 'pg'
bundle install
を実行します。
Gemfile
からsqlitegemを削除します(オプションでdb/*.sqlite3
ファイルを削除します)。
データベースを作成し、schema.rbをロードし、db:setup
タスクを使用してデータベースをシードします。
bundle exec rake db:setup
# Run bin/rake -AD db to see all db-related tasks
Railsアプリを起動または再起動して、機能していることを確認します。
古いsqliteデータベースの非シードデータは新しいデータベースには存在しないことに注意してください。
Psqlクライアントを使用してPostgreSQLと直接対話する場合は、ターミナルでpsql
を実行するかbin/Rails db
を実行します。
ユーザー名「ubuntu」を空白のパスワードとともに使用します。私のdatabase.ymlは次のようになります:
開発:
アダプター:postgresql
エンコーディング:ユニコード
データベース:myflix_development
プール:5
ユーザー名:ubuntu
パスワード:
テスト:
アダプター:postgresql
エンコーディング:ユニコード
データベース:myflix_test
プール:5
ユーザー名:ubuntu
パスワード:
その後、パスワードが間違っていると文句を言う場合は、Cloud9の手順を使用してパスワードを変更してみてください。
コマンドラインで、次のように入力します。Sudo sudo -u postgres psql
postgres =#\password
新しいパスワードを入力してください: leave it blank and press enter
もう一度入力してください:leave it blank and press enter
postgres =#\q
私はこれにかなり慣れていません。それがうまくいくことを願っています!
私にとっては、 Cloud9ワークスペースをRails and Postgresql でセットアップするだけでは不十分でした。ユーザーには渡されましたが、パスワードは渡されませんでした。echo $USERNAME
何も思いつかなかった。
$ Sudo su - postgres
$ createuser ubuntu -dslP
それから私はこれをしました:
Sudo sudo -u postgres psql
postgres=# \password
Enter new password: entered a real password
Enter it again: entered it again
postgres=# \q
次に、yamlファイルでこれを行いました(ホスト部分を強制終了したことに注意してください):
development:
adapter: postgresql
encoding: unicode
database: my_database_name
pool: 5
username: ubuntu
password: actual_password
次に、次のコマンドを使用してデータベースを作成できました。
rake db:create
そして、私のRailsサーバーは、これ以上問題なく起動しました。
解決策を見つけました。次のように、認証をピアからmd5に変更するには、pg_hba.confファイルを編集する必要があります。
local postgres postgres md5
Cloud9の端末からしかアクセスできないため、ファイルを見つけるのは困難です。ファイルツリーに見つかりません。
Postgresに次のように入力すると、場所が表示されます
SHOW hba_file;
その後、ターミナルを介してvimで検索および編集できます。
データベースを作成する前にRailsアプリがある場合の短いバージョン:
gem'pg 'を追加しますgemsqlite3を削除します
$ bundle install
$ gem install pg
次に、
$Sudo service postgresql start
$psql -c "create database myapp_development owner=ubuntu"
https://community.c9.io/t/how-do-i-set-up-postgresql-on-c9-for-my-Rails-app/2614/4
Myappを任意の名前に変更します。次に、以下をコピーして貼り付け、myappを任意の名前に変更します。
/myapp/config/database.yml
development:
adapter: postgresql
encoding: unicode
database: myapp_development
pool: 5
username: ubuntu
password:
timeout: 5000
上記のコメントのように、パスワードは必要ありません。ユーザー名はubuntuのままです。
$rake db:migrate
Herokuを使用している場合は、database.ymlの本番セクションは必要ありません。