RoR2.2.2とMySQL (数日前からの続き)

RoRMySQLをつなぐドライバ

数日前から保留していた作業を再開する。
前回は、Rails 2.2では、mysql.rbドライバはないよ、と言われて、そこで停滞していた。
解決方法として見つけたページが、この方の日記→ id:tohtas:20081207

私はSuSE11なので、パスを読み替えてやってみようとするが、問題発覚。
mysql_config5が、私の環境にはない。試しに、mysql_config --versionとしても、

The program 'mysql_config' can be found in the following package:
* libmysqlclient-devel [ path: /usr/bin/mysql_config, repository: zypp (repo-oss) ]

とのエラー。
言われるがままに、sudo zypper install libmysqlclient-develを行う。ダウンロードしたデバイスをマウントできないとのエラーあり。
さらに、パッケージの依存関係が壊れている可能性あり、と指摘。
zypper verify, zypper refreshをやる。
分からないままにやってみると、/usr/bin/mysql_configができた。が、mysql_config5とこれは一緒なのだろうか?ともあれやってみる。
warningは出るが、、、

> cd /usr/lib64/ruby/gems/1.8/gems/mysql-2.7/
> sudo ruby extconf.rb --with-mysql-config
checking for mysql_ssl_set()... yes
checking for mysql.h... yes
creating Makefile
> sudo make
gcc -I. -I. -I/usr/lib64/ruby/1.8/x86_64-linux -I. -DHAVE_MYSQL_SSL_SET -DHAVE_MYSQL_H -I/usr/include/mysql -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -g -DPIC -fPIC -DUNDEF_HAVE_INITGROUPS -fno-strict-aliasing -fPIC -fmessage-length=0 -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -g -g -fno-strict-aliasing -fPIC -c mysql.c
mysql.c: In function ‘make_field_obj’:
mysql.c:185: warning: unused variable ‘hash’
mysql.c: In function ‘stmt_execute’:
mysql.c:1316: warning: unused variable ‘false’
mysql.c: In function ‘time_inspect’:
mysql.c:1714: warning: format ‘%04d’ expects type ‘int’, but argument 3 has type ‘long int’
mysql.c:1714: warning: format ‘%02d’ expects type ‘int’, but argument 4 has type ‘long int’
mysql.c:1714: warning: format ‘%02d’ expects type ‘int’, but argument 5 has type ‘long int’
mysql.c:1714: warning: format ‘%02d’ expects type ‘int’, but argument 6 has type ‘long int’
mysql.c:1714: warning: format ‘%02d’ expects type ‘int’, but argument 7 has type ‘long int’
mysql.c:1714: warning: format ‘%02d’ expects type ‘int’, but argument 8 has type ‘long int’
mysql.c: In function ‘time_to_s’:
mysql.c:1727: warning: format ‘%04d’ expects type ‘int’, but argument 3 has type ‘long int’
mysql.c:1727: warning: format ‘%02d’ expects type ‘int’, but argument 4 has type ‘long int’
mysql.c:1727: warning: format ‘%02d’ expects type ‘int’, but argument 5 has type ‘long int’
mysql.c:1727: warning: format ‘%02d’ expects type ‘int’, but argument 6 has type ‘long int’
mysql.c:1727: warning: format ‘%02d’ expects type ‘int’, but argument 7 has type ‘long int’
mysql.c:1727: warning: format ‘%02d’ expects type ‘int’, but argument 8 has type ‘long int’
mysql.c: In function ‘time_initialize’:
mysql.c:1703: warning: control reaches end of non-void function
mysql.c: In function ‘stmt_execute’:
mysql.c:1365: warning: ‘t.time_type’ may be used uninitialized in this function
mysql.c:1378: warning: ‘t.time_type’ may be used uninitialized in this function
gcc -shared -o mysql.so mysql.o -L. -L/usr/lib64 -Wl,-R/usr/lib64 -L. -rdynamic -Wl,-export-dynamic -Wl,-R -Wl,/usr/lib64 -L/usr/lib64 -lruby -L/usr/lib64/mysql -lmysqlclient -lz -lcrypt -lnsl -lm -L/usr/lib64 -lssl -lcrypto -ldl -lcrypt -lm -lc
> sudo make install
/usr/bin/install -c -m 0755 mysql.so /usr/lib64/ruby/site_ruby/1.8/x86_64-linux

何とかインストールできたようなので、データベースを作ってみる。(先日、設定ファイル*.ymlは編集済み)

>cd /RoR_test/BMDS
> rake db:migrate
(in /RoR_test/BMDS)
 == CreateBmdsV5s: migrating ==================================================
 -- create_table(:bmds_v5s)
-> 0.0702s
 == CreateBmdsV5s: migrated (0.0709s) =========================================

これで、先日設定したBMDS_developmentというデータベースにbmds_v5sというテーブルができているはず。mysqlコマンドで普通に見てみると、成功していることが分かる。

mysql> show databases;

                                          • +
Database
                                          • +
information_schema
BMDS
BMDS_development
mysql
                                          • +

mysql> use BMDS_development
mysql> show tables;

                                                          • +
Tables_in_BMDS_development
                                                          • +
bmds_v5s
schema_migrations
                                                          • +

次に、ブラウザ関係の処理を生成する。

> ruby script/generate scaffold bmds_v5
exists app/models/
exists app/controllers/
exists app/helpers/
create app/views/bmds_v5s
exists app/views/layouts/
exists test/functional/
exists test/unit/
exists public/stylesheets/
create app/views/bmds_v5s/index.html.erb
create app/views/bmds_v5s/show.html.erb
create app/views/bmds_v5s/new.html.erb
create app/views/bmds_v5s/edit.html.erb
create app/views/layouts/bmds_v5s.html.erb
create public/stylesheets/scaffold.css
create app/controllers/bmds_v5s_controller.rb
create test/functional/bmds_v5s_controller_test.rb
create app/helpers/bmds_v5s_helper.rb
route map.resources :bmds_v5s
dependency model
exists app/models/
exists test/unit/
exists test/fixtures/
identical app/models/bmds_v5.rb
identical test/unit/bmds_v5_test.rb
identical test/fixtures/bmds_v5s.yml
exists db/migrate
Another migration is already named create_bmds_v5s: db/migrate/20090311135143_create_bmds_v5s.rb

ブラウザで確認するため、サーバを立ち上げsudo ruby script/serverてから、ブラウザで、http://localhost:3000/bmds_v5s へ、アクセスする。’Listing bmds_v5s’ の画面が見えれば、とりあえずはOK!

RailsRubyの用語(超初心者)

rake Railsの運用や保守のためのツール群。makeみたいなもの、らしい。
migrate 〃
about  〃

gems Rubyのパッケージ管理ツール。gemsのパッケージになっていると、導入や更新の手間を減らすことができる。Railsプラグインとして提供されていることもある。