写経 (10分で作るRailsアプリ)
最新LLフレームワークエクスプローラ (長) より。
# 写経云々以前に環境設定なナニが微妙かも。
DB の準備
とりあえず DB 作成してみた。親側です (chroot 環境では mysql-server を install してませんので)。
# mysql -u root mysql> create database bookmark default character set utf8 ; Query OK, 1 row affected (1.07 sec) mysql> grant all privileges on bookmark.* to bmuser@192.168.0.1 identified by 'bmuser' ; Query OK, 0 rows affected (0.91 sec) mysql> \q Bye
IP は適当です。(こら
# てか、@ 以降のホスト識別情報ですが、クライアント側の情報なんだろな。
# chroot だと一緒なのでなんか微妙。
で、接続試験。
# mysql -u bmuser bookmark -h 192.168.0.1 -p Enter password: ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.3.2' (111) #
当たり前のように接続失敗。とりあえず ping の返事は帰ってくるんですが、ハマるならココだろうなナニを的確に突いてくるあたりはさすがですな。(何
chroot 側から接続できんな、と思って netstat 見てみるとこんななってるし。
# netstat -n --tcp --all|grep 3306 tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN #
localhost しかリスンしてねぇし。これってドコに設定情報あるんだろな、と。
で、色々調べてみると、mysql てきには以下らしい。
# grep 'bind-add' /etc/mysql/my.cnf bind-address = 127.0.0.1 #
ざくっとしか調べてないのでアレなんですが、コメントアウトすればとりあえず動く、との事。きちんとしたヤリ方はあるはずなので、今回はざくっと済ませよう。以下が参考コンテンツです。
で、試験したトコ、接続できますた。
(chroot 側) # mysql -u bmuser bookmark -h 192.168.0.1 -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 to server version: 5.0.20-Debian_1-log Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> \q Bye #
解決方法が微妙スギだが、とりあえずスルー。端末ベースで接続できたんで写経を。とりあえず、$RAIS_ROOT/config/database.yml の development なナニを以下に修正。
development: adapter: mysql database: bookmark username: bmuser password: bmuser host: 192.168.0.1
サーバ側にてテーブルも定義。
# mysql -u root mysql> connect bookmark Connection id: 10 Current database: bookmark mysql> create table items ( -> id integer auto_increment, -> url varchar(255), -> title varchar(255), -> description text, -> primary key (id) -> ); Query OK, 0 rows affected (1.29 sec) mysql> \q Bye #
なんか微妙だが (写経な結果がケられたので primary key 句を追加) このまま進めてみます。
コーディング
このサンプルでは scaffold な generator を使っていない模様。model と controller を個別に作成しておりますな。がしかし、面倒なので scaffold を generate。
$ ruby script/generate scaffold Item Item exists app/controllers/ exists app/helpers/ create app/views/item exists test/functional/ dependency model exists app/models/ exists test/unit/ exists test/fixtures/ create app/models/item.rb create test/unit/item_test.rb create test/fixtures/items.yml create app/views/item/_form.rhtml create app/views/item/list.rhtml create app/views/item/show.rhtml create app/views/item/new.rhtml create app/views/item/edit.rhtml create app/controllers/item_controller.rb create test/functional/item_controller_test.rb create app/helpers/item_helper.rb create app/views/layouts/item.rhtml create public/stylesheets/scaffold.css $
動作確認は略。テキストでは list アクションのコードについての解説あり。ほとんどのメソッド(アクション) が一行。以下が list アクション。
def list @item_pages, @items = paginate :items, :per_page => 10 end
item_pages と items という名前のインスタンス変数に paginate というメソッドの戻りを設定している訳ですな(あら? このメソッドはもしかすると二値を返却しているのかなぁ)。controller クラスのインスタンス変数は view で取り出せたはずなので (うろ覚え) app/views/item/list.rhtml でナントヤラ、な処理が記述されているはずである、と。
ちなみにテキストでは、この paginate メソッドの引数についての簡易な解説あり。paginate メソッドの詳細な説明は以下のサイト、との事。
Module:ActionController::Pagination
日本語化
忘れていた。UTF-8 対応をしておかねば、という事で
- mule-ucs パケジの導入
- config/environment.rb の修正
config/environment.rb の先頭に以下の一行を追加
$KCODE = 'u'
- app/controllers/application.rb の修正
app/controllers/application.rb の ApplicationController クラスの定義部分を以下のように修正。
class ApplicationController < ActionController::Base before_filter :set_charset protected def set_charset @headers["Content-Type"] = "text/html; charset=utf-8" end end
10 分で、と言いつつ集中力が無いタメ {暑い, がきが五月蝿い, 遊びに行きたい}、なかなか先に進まない。