PostgreSQLのセットアップが完了したので、Ruby on Railsとの接続確立を確認します。
参考ページ
Postgresql on Rails and OSX (Potential Energy)
■RailsにPostgreSQL用のアダプタを与える
アダプタは2種類あるようです。どちらもgemコマンドでインストールできます。
違いは、わかりません。。1つ目の方法は、引数のパスを環境に合わせて変更する必要があります。
gem install postgres -- --with-pgsql-include-dir=/usr/local/pgsql/include --with-pgsql-lib-dir=/usr/local/pgsql/lib |
gem install postgres-pr |
結果ですが、1つ目の方法はパスをさらに設定してやらないとエラーになりました。
/etc/ld.so.confとやらに追記する方法もあるようですが、熟練者向けってどこかで書いてたのでやめました。
今回はサーバーを起動するユーザの(root).bash_profileファイルにLD_LIBRARY_PATHを設定しました。
以下を追加しました。
export POSTGRES_HOME=/usr/local/pgsql
export PGLIB=$POSTGRES_HOME/lib
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":"$PGLIB"
[root@mycentos ~]# cat .bash_profile # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/bin export PATH export POSTGRES_HOME=/usr/local/pgsql export PGLIB=$POSTGRES_HOME/lib export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":"$PGLIB" unset USERNAME |
.bash_profileを反映します。再読込み。
[root@mycentos ~]# source ~root/.bash_profile |
2つ目の方法はインストールするだけで使えました。
うわさでは、1つ目のアダプタの方が処理が速いとか。。
■RailsのPostgreSQLへの設定をして接続を確認
続いて、RailsにDB接続確認用の画面を作ってみます。
任意の場所に任意のフォルダを作ります。
[root@mycentos var]# mkdir raily [root@mycentos var]# cd raily [root@mycentos raily]# |
railsコマンドでDBテストプロジェクトを作成する
[root@mycentos raily]# rails dbtest create create app/controllers create app/helpers create app/models ・ ・ ・ create public/javascripts/application.js create doc/README_FOR_APP create log/server.log create log/production.log create log/development.log create log/test.log [root@mycentos raily]# |
database.ymlを編集して、PostgreSQLのアダプタを使うようにします
viの使い方はviを使い倒そうで覚えました。
[root@mycentos raily]# cd dbtest/config [root@mycentos config]# vi database.yml |
とりあえず、development、test、productionの3箇所を以下のように変えました。
先に、pgAdminⅢを使ってスキーマを作成しました。pgAdminⅢはGUIなので方法は書きません。
(Railsのプロジェクトとスキーマは1対1でないと駄目だと思うよ)
adapterはそのままpostgresql、databaseは作成したDBの名前、usernameは作成したDBを編集できるロールの名前、passwordはそのロールのパスワード、encodingは作成したDBの文字コード(今回はUTF8で作成した)
adapter: postgresql
database: dbtest
username: ruby
password: rails
host: localhost
encoding: utf8
[root@mycentos config]# cat database.yml # MySQL (default setup). Versions 4.1 and 5.0 are recommended. # # Install the MySQL driver: # gem install mysql # On MacOS X: # gem install mysql -- --include=/usr/local/lib # On Windows: # gem install mysql # Choose the win32 build. # Install MySQL and put its /bin directory on your path. # # And be sure to use new-style password hashing: # http://dev.mysql.com/doc/refman/5.0/en/old-client.html development: adapter: postgresql database: dbtest username: ruby password: rails host: localhost encoding: utf8 # 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: postgresql database: dbtest username: ruby password: rails host: localhost encoding: utf8 production: adapter: postgresql database: dbtest username: ruby password: rails host: localhost encoding: utf8 |
では、プログラムを作成します。コマンドで雛形を作成してくれます。助かります。
candyモデルを作成
[root@mycentos config]# cd ../ [root@mycentos dbtest]# ruby script/generate model candy exists app/models/ exists test/unit/ exists test/fixtures/ create app/models/candy.rb create test/unit/candy_test.rb create test/fixtures/candies.yml create db/migrate create db/migrate/001_create_candies.rb [root@mycentos dbtest]# |
作成されたdb/migrate/001_create_candies.rbを編集して、テーブルを作成します。
以下のように編集
[root@mycentos dbtest]# vi db/migrate/001_create_candies.rb class CreateCandies < ActiveRecord::Migration def self.up create_table :candies do |t| t.column :name, :string, :limit => 30, :null => false t.column :volume, :integer, :default => 0, :null => false t.column :bb_date, :date t.column :created_at, :timestamp end end def self.down drop_table :candies end end |
rake db:migrateコマンドを実行する。
[root@mycentos dbtest]# rake db:migrate (in /var/raily/dbtest) == CreateCandies: migrating =================================================== -- create_table(:candies) NOTICE: CREATE TABLE will create implicit sequence "candies_id_seq" for serial column "candies.id" NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "candies_pkey" for table "candies" -> 0.0127s == CreateCandies: migrated (0.0129s) ========================================== [root@mycentos dbtest]# |
んー出来たか不安だけど、次にcandyのscaffoldを作ります。
[root@mycentos dbtest]# ruby script/generate scaffold candy exists app/controllers/ exists app/helpers/ exists app/views/candies exists app/views/layouts/ exists test/functional/ dependency model exists app/models/ exists test/unit/ exists test/fixtures/ identical app/models/candy.rb identical test/unit/candy_test.rb identical test/fixtures/candies.yml create app/views/candies/_form.rhtml create app/views/candies/list.rhtml create app/views/candies/show.rhtml create app/views/candies/new.rhtml create app/views/candies/edit.rhtml create app/controllers/candies_controller.rb create test/functional/candies_controller_test.rb create app/helpers/candies_helper.rb create app/views/layouts/candies.rhtml create public/stylesheets/scaffold.css [root@mycentos dbtest]# |
では、WEBrickを起動してみましょう。
[root@ndatacom dbtest]# ruby script/server => Booting WEBrick... => Rails application started on http://0.0.0.0:3000 => Ctrl-C to shutdown server; call with --help for options [2007-08-20 11:58:39] INFO WEBrick 1.3.1 [2007-08-20 11:58:39] INFO ruby 1.8.6 (2007-03-13) [x86_64-linux] [2007-08-20 11:58:39] INFO WEBrick::HTTPServer#start: pid=23716 port=3000 |
画面でみれた。登録もできる。日本語もでた。