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のものです。
よく比較してください。
sqlite3のdatabase.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のことなのか区別しづらいですが、
ともかくこれがポスグレの設定です。
Genmfile(PostgreSQL)
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] |
こちらは参考です。
Genmfile(sqlite3)
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を見直します。
usenameとpasswordがポスグレのスーパーユーザ作成時のものと異なっているからです。
adapter: postgresql encoding: utf8 database: test_apl_production pool: 5 username: test_apl password: 何も書かれていない(nil) |
直します。
postgreSQLで作成したDBユーザがわからなくなった人は、
インストール時のPasswordの画面をみます。→こちら
修正したら、再度rake db:createを実行します。
何事も無ければ、少し時間が経ってからコマンド待ち状態に戻ります。
3.modelをgenerateする
次に、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 newのbundleで失敗してしまった、またはすでにパッケージを作成していて、
DBのアダプタを追加したい場合の対処について、説明していきます。
まず、パッケージを作成したフォルダに移動してください。
そこで、以下を実行します。
gem install postgres-pr
無事終了したらbundleの成功です。
続いて、database.ymlを確認してください。
すでにsqlite3で一度パッケージを作っていると、このファイルを修正しないとポスグレに接続できません。
必ず修正します。
もちろん、gemfile、gemfilelockも修正します。
このような手間が多いので、もし、ポスグレで接続したい場合、今回の冒頭から順にrails newして適当なパッケージを作り、
該当の設定ファイル3つを、開発しているパッケージに上書きしてしまうのが早いです。
以下のようにアダプタをbundleする方法もあるようですが、試していません。
詳しくは、リンクのRailsとPostgreSQLの接続を作るに詳細が書かれていますので、参照してください。
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
RailsとPostgreSQLの接続を作る「RailsからPostgreSQLへ接続してみる」
http://leaveanotemessagebehind.blogspot.jp/2007/08/railspostgresql.html
OKWave「passwordが入れられません・・・・」
http://okwave.jp/qa/q4456256.html
Raccoon's
homepage Copyright (C) 2000-2013 あらいベアー