PostgreSQLをインストールする 第2回

Ruby on Railsとポスグレ(PostgreSQL)を接続する〜

 

前回、ポスグレのインストールと接続の確認をしました。

今回はいよいよ、Rails側から、アダプターをバンドルして、ポスグレDBでDBcreateしてみます。

 

もし、ポスグレのインストールができてないようでしたら、こちらを参照してください。

 

1.PostgreSQLアダプタをBundleする

 コマンドは非常に単純です。

 まず、rubyコマンドプロンプトを開き、これからDBを使用したいパッケージに異動してください。

移動したら、下記のようにrails generateコマンドを実行します。

このとき、-d postgresqlというオプションをつけます。(つけないとDBはsqlite3になります。)

 

$rails new test_apl -d postgresql

 

無事終わると、画面にこのようなメッセージが出ます。

※ここでは、test_aplというパッケージにしています。

Your bundle is complete!

Use `bundle show [gemname]` to see where a bundled gem is installed.

 

C:\test_apl>rake db:create

 

ここで、無事終わった人は、bundlaまで正常に完了しています。

もし、うまくいかなかったり、個別にpostgresql用アダプタをバンドルする方法は、今回のおしまいのほうで紹介します。

 

さて、今回、確認しておくべきファイルが2,3あります。

@database.yml

このファイルの所在はわかりますか?

わからない方は、を見てください。

以下のような内容になっています。

黒字のボールドはpostgresqlでジェネレイトしたときに自動で代わります。

赤字はunicodeになっているので、自分で変えてください。

PostgreSQLでのdatabase.ymlファイル

# PostgreSQL. Versions 8.2 and up are supported.

#

# Install the pg driver:

(中略)

#

# Configure Using Gemfile

# gem 'pg'

#

development:

  adapter: postgresql

  encoding: utf8

  database: test_apl_development

  pool: 5

  username: test_apl

  password:何も書かれていない(nil

 

  # Connect on a TCP socket. Omitted by default since the client uses a

(中略)

  # If your server runs on a different port number, change accordingly.

  #port: 5432

 

  # Schema search path. The server defaults to $user,public

 

(中略)

test:

  adapter: postgresql

  encoding: utf8

  database: test_apl_test

  pool: 5

  username: test_apl

  password: 何も書かれていない(nil

 

production:

  adapter: postgresql

  encoding: utf8

  database: test_apl_production

  pool: 5

  username: test_apl

  password: 何も書かれていない(nil

 

下記がデフォルトのDBのsqlite3のものです。

よく比較してください。

sqlite3database.yml

# SQLite version 3.x

#   gem install sqlite3

#

#   Ensure the SQLite 3 gem is defined in your Gemfile

#   gem 'sqlite3'

development:

  adapter: sqlite3

  database: db/development.sqlite3

  pool: 5

  timeout: 5000

 

# Warning: The database defined as "test" will be erased and

# re-generated from your development database when you run "rake".

# Do not set this db to the same as development or production.

test:

  adapter: sqlite3

  database: db/test.sqlite3

  pool: 5

  timeout: 5000

 

production:

  adapter: sqlite3

  database: db/production.sqlite3

  pool: 5

  timeout: 5000

Agenfile

こちらも非常に重要です。ポスグレはpgと略されるのがプログラムのpgのことなのか区別しづらいですが、

ともかくこれがポスグレの設定です。

GenmfilePostgreSQL

source 'https://rubygems.org'

 

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'

gem 'rails', '4.0.0.rc1'

 

# Use postgresql as the database for Active Record

gem 'pg'

 

# Use SCSS for stylesheets

・・・(中略)・・・

 

# Use debugger

# gem 'debugger', group: [:development, :test]

こちらは参考です。

Genmfilesqlite3

source 'https://rubygems.org'

 

gem 'rails', '3.2.12'

 

# Bundle edge Rails instead:

# gem 'rails', :git => 'git://github.com/rails/rails.git'

 

gem 'sqlite3'

 

・・・(中略)・・・

 

# To use debugger

# gem 'debugger'

 

このほかにgemfilelockも違いが存在するようですが、heroku登録において特に気にする必要はありません。

余力があれば見ておいてください。

 

2.Rakeタスクの実行

 

次に、rakeコマンドを実行します。

これは、C言語などでよく見かけるmakeコマンドのrubyだと思ってください。

 

C:\test_apl>rake db:create

 

ここで以下のようなエラーが出ます。←出るならもっと前に言えよ!

 

Fe_sendauth: no password supplied

 

さっきのdatabase.ymlを見直します。

usenamepasswordがポスグレのスーパーユーザ作成時のものと異なっているからです。

  adapter: postgresql

  encoding: utf8

  database: test_apl_production

  pool: 5

  username: test_apl

  password: 何も書かれていない(nil

 

直します。

postgreSQLで作成したDBユーザがわからなくなった人は、

インストール時のPasswordの画面をみます。→こちら

 

修正したら、再度rake db:createを実行します。

何事も無ければ、少し時間が経ってからコマンド待ち状態に戻ります。

 

3.modelgenerateする

次に、modelジェネレートして、マイグレーションファイルを作ります。

ここでは、memberというモデルを作ります。

 

$rails g model member

 

rails g model member

      invoke  active_record

      create    db/migrate/20130514084625_create_members.rb

      create    app/models/member.rb

      invoke    test_unit

      create      test/models/member_test.rb

      create      test/fixtures/members.yml

 

上記の日付yyyymmddHHMMSS_create_members.rbがマイグレーションファイルです。

これは、DBのスキーマを作成するための見積もりファイルで、

この後migrateタスクを実行するのに必要です。Models/member.rbも比較的すぐに使います。

Createされた場所を良く覚えておいてください。

テストクラスも作成されますが、いまは気にしません。

 

ではマイグレーションファイルをを確認しましょう。

 

C:\test_apl\db\migrate

 

20130514084625_create_members.rb

class CreateMembers < ActiveRecord::Migration

  def change

    create_table :members do |t|

 

      t.timestamps

    end

  end

end

となっています。

いまは、更新日時を示すtimestampしかありませんが、その上に、memberテーブルに必要な項目を追加していくことになります。

お疲れ様でした。

無事、マイグレートファイルができたみたいですね。

ここで、herokuにとりあえずプッシュしてみたい場合は、へ進んでください。

 

問題なければ次回はマイグレーションファイルを修正して、ポスグレにデータを投入します。

 

おまけ.Postgresqlアダプタを単体でbundleする

さて、今回最初に実行したrails newbundleで失敗してしまった、またはすでにパッケージを作成していて、

DBのアダプタを追加したい場合の対処について、説明していきます。

 

まず、パッケージを作成したフォルダに移動してください。

そこで、以下を実行します。

 

gem install postgres-pr

 

無事終了したらbundleの成功です。

続いて、database.ymlを確認してください。

すでにsqlite3で一度パッケージを作っていると、このファイルを修正しないとポスグレに接続できません

必ず修正します。

もちろん、gemfilegemfilelockも修正します。

 

このような手間が多いので、もし、ポスグレで接続したい場合、今回の冒頭から順にrails newして適当なパッケージを作り、

該当の設定ファイル3つを、開発しているパッケージに上書きしてしまうのが早いです。

 

以下のようにアダプタをbundleする方法もあるようですが、試していません。

詳しくは、リンクのRailsPostgreSQLの接続を作るに詳細が書かれていますので、参照してください。

 

gem install postgres -- --with-pgsql-include-dir=C:\Program Files\PostgreSQL\9.2\include

 --with-pgsql-lib-dir=C:\Program Files\PostgreSQL\9.2\lib

 

いや〜、画面が少なくなってきた・・・

 

     参考サイト■

戯言メイテル「2013-04-24 Ruby on RailsからPosgtreSQLを使う」

http://d.hatena.ne.jp/iriya_0624/20130424/1366783019

RailsPostgreSQLの接続を作る「RailsからPostgreSQLへ接続してみる」

http://leaveanotemessagebehind.blogspot.jp/2007/08/railspostgresql.html

OKWavepasswordが入れられません・・・・」

http://okwave.jp/qa/q4456256.html

 

 

戻るとっぷ次へ

 

Raccoon's homepage Copyright (C) 2000-2013 あらいベアー