1

ruby 2.3.0p0Rails 4.2.4 on cloud 9を使用して おり、データベースを SQLite3 から PostgreSQL に変更したいと考えています。

私はsqlite3に関するいくつかのデータを持っています。

# config/database.yml
default: &default
  adapter: sqlite3
  pool: 5
  timeout: 5000

development:
  <<: *default
  database: db/development.sqlite3
test:
  <<: *default
  database: db/test.sqlite3
production:
  <<: *default
  database: db/production.sqlite3

taps gemを試してみましたが、ユーザー名とパスワードを求められましたが、それらの資格情報がどこにあるのかわかりません。

この問題の他の解決策はありますか?

4

2 に答える 2

2

まず、postgresql が実行されていることを確認する必要があります。開始する必要がある場合は、次のコマンドを実行します。

$ sudo service postgresql start

インタラクティブな postgresql ターミナル psql に入ります。

$ sudo sudo -u postgres psql

ユーザーを作成してそのパスワードを入力し、psql を終了します。

postgres=# CREATE USER username SUPERUSER PASSWORD 'password';
postgres=# \q

環境変数を作成して config.yml ファイルに配置し、それらを ~/.profile ファイルにエクスポートします。

$ echo "export USERNAME=username" >> ~/.profile
$ echo "export PASSWORD=password" >> ~/.profile

次に、postgresql から template1 を更新します。

$ sudo sudo -u postgres psql
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

ガベージを収集し、実行中のデータベースを分析しますVACUUM

postgres# VACUUM FREEZE;
postgres# \q

この内容が以前に行ったことと一致するように、構成ファイルを更新します。

default: &default
  adapter: postgresql
  encoding: unicode
  pool: 5
  username: <%= ENV['USERNAME'] %>
  password: <%= ENV['PASSWORD'] %>
  host:     <%= ENV['IP'] %>

development:
  <<: *default
  database: app_development

test:
  <<: *default
  database: app_test

production:
  <<: *default
  database: app_production

pg gem がインストールされているかどうかを確認し、インストールされていない場合は実行し、それを Gemfile に追加してからバンドルします。

gem install pg
bundle install

データベースがまだ作成されていない場合、および/または次のメッセージが表示される場合:

ActiveRecord::NoDatabaseError: FATAL:  database "<project_name>_development" does not exist

次に、適切なコマンドを実行して作成します。

rake db:create

すべてが正常に実行されているかどうかをテストするには、単純な scaffold を生成してみてください。

rails g scaffold Post title content:text

この移行とそのコンテンツをデータベースに永続化するには、migrate コマンドを実行します。

rake db:migrate

成功した場合は、すべて問題なく動作するはずです。次を実行できます。

rails console

データベースに新しいレコードを作成します。

Post.create title: 'Number one', content: 'Lorem Ipsum' 

そして、コーディングと楽しみを続けてください。

注:次のようなエラーを実験した場合:

PG::ConnectionBad: fe_sendauth: no password supplied

次に、env 変数に問題がないことを確認します。エラーが続く場合は、config.yml ファイルに名前とパスワードを「ハードコード」できますが、これはお勧めできません。最悪の場合。

于 2016-07-16T18:09:32.510 に答える
0

ファイルはpostgresdatabase.ymlの場合のようになります。

default: &default
  adapter: postgresql
  user: username
  password: *****
  pool: 5
  timeout: 5000

development:
  <<: *default
  database: myrubyblogdev

test:
  <<: *default
  database: myrubyblogtest

また、gemfileに追加しますgem 'pg'

sqlite データベースに含まれるデータについては、rake新しく作成した postgres データベースにデータを転送するタスクを作成できます。

于 2016-07-16T08:37:57.623 に答える