プロトタイプ作成な log
とりあえず、rails でプロトタイプ作ってみて、Django でも同じソレを作ってみる事で評価してみる事に。ただし、別途 SD なサンプルをリバースしてみて評価はする予定。
色んな意味でヘコんでばかりもいられませんので。(何
で、とりあえず以下の手順でざっくり作ってみる
ココまでヤッて同じソレを Django でナニしてみますか。
# rails 方面についてはリハビリ必要
rails プロジェクト作成
業務向けなんですがプロトタイプなんで全部サラす。一応開発な環境で作業を。
ってそりゃいいんですが、環境ってどーなってんだよ、と言いつつブログをほじくると、このエントリにて色々ヤッてる模様。gem で install してるんだったら確か ... と言いつつ
$ ls /usr/lib/ruby/gems/1.8/gems/ BlueCloth-1.0.0 actionpack-1.12.5 activesupport-1.2.5 rails-1.0.0 RedCloth-3.0.4 actionwebservice-1.0.0 activesupport-1.3.1 rails-1.1.6 actionmailer-1.1.5 actionwebservice-1.1.6 acts_as_taggable-2.0.2 rake-0.7.1 actionmailer-1.2.5 activerecord-1.13.2 builder-2.0.0 sources-0.0.1 actionpack-1.11.2 activerecord-1.14.4 feedtools-0.2.26 uuidtools-1.0.0 $
とりあえずプロトタイプなんで、と言い訳しつつ 1.1.6 を使う事に決定。とりあえず手探り状態ですが、ヤッてみます。
$ rails proto (出力は略) $
一応、ココ式で symlink を張っておく事に。
$ cd proto $ cd vendor $ ls plugins $ mkdir rails $ cd rails $ ln -s /usr/lib/ruby/gems/1.8/gems/actionmailer-1.2.5 actionmailer $ ln -s /usr/lib/ruby/gems/1.8/gems/actionpack-1.12.5 actionpack $ ln -s /usr/lib/ruby/gems/1.8/gems/actionwebservice-1.1.6 actionwebservice $ ln -s /usr/lib/ruby/gems/1.8/gems/activerecord-1.14.4 activerecord $ ln -s /usr/lib/ruby/gems/1.8/gems/activesupport-1.3.1 activesupport $ ln -s /usr/lib/ruby/gems/1.8/gems/rails-1.1.6 railties $ ls actionmailer actionpack actionwebservice activerecord activesupport railties $
とっとと migrate してしまいたいのですが、とりあえず sqlite3 な config/database.yml を作っておきます。その前に開発環境に sqlite3 ガラミなソレ達を install。こいつの debian なバージョンっていくつなんだろうか。(を
# apt-get install sqlite3 -fy Reading Package Lists... Done Building Dependency Tree... Done The following extra packages will be installed: libreadline5 libsqlite3-0 Suggested packages: sqlite3-doc The following NEW packages will be installed: libreadline5 libsqlite3-0 sqlite3 (以下略) #
ruby なソレも必要なんだろうな。
# apt-cache search sqlite|grep ruby libdbd-sqlite-ruby - Ruby/DBI driver for SQLite libdbd-sqlite-ruby1.6 - Ruby/DBI SQLite driver for Ruby 1.6 libdbd-sqlite-ruby1.8 - Ruby/DBI SQLite driver for Ruby 1.8 # apt-get install libdbd-sqlite-ruby Reading Package Lists... Done Building Dependency Tree... Done The following extra packages will be installed: libdbd-sqlite-ruby1.8 libdbi-ruby1.8 libsqlite0 Suggested packages: libdbi-ruby The following NEW packages will be installed: libdbd-sqlite-ruby libdbd-sqlite-ruby1.8 libdbi-ruby1.8 libsqlite0 (以下略 #
これでヤッてみます。ええと、以下。(抜粋
development: adapter: sqlite3 database: db/sqlite3 (中略 test: adapter: sqlite3 database: db/sqlite3.db
スペジェネ使いたいんですが、とりあえず真っ当なのをこさえてみる。
$ ./script/generate model Hello exists app/models/ exists test/unit/ exists test/fixtures/ create app/models/hello.rb create test/unit/hello_test.rb create test/fixtures/hellos.yml create db/migrate create db/migrate/001_create_hellos.rb $
で、とりあえず、db/migrate/001_create_hellos.rb を以下のように。
class CreateHellos < ActiveRecord::Migration def self.up create_table :hellos do |t| # t.column :name, :string t.column :name, :string t.column :value, :string end end def self.down drop_table :hellos end end
で、migrate 実行したら以下。
$ rake db:migrate (in /home/xxx/proto) rake aborted! no such file to load -- sqlite3 (See full trace by running task with --trace) $
どうもパケジが不足らしい。ここによると libsqlite3-dev と gem で入れる sqlite3-ruby ってナニが必要との事。
# apt-get install -fy libsqlite3-dev # gem install sqlite3-ruby
微妙に文句を言われた気がしますがスルー。で、再度チャレンジの前に config/database.yml を修正しとく。以下抜粋。
development: adapter: sqlite3 database: db/dev.sqlite3.db (中略 test: adapter: sqlite3 database: db/test.sqlite3.db
で、リトライ。
$ rake db:migrate (in /home/xxx/proto) == CreateHellos: migrating ==================================================== -- create_table(:hellos) -> 0.0217s == CreateHellos: migrated (0.0224s) =========================================== $
うむ。ナカミも見てみる。
$ sqlite3 db/dev.sqlite3.db SQLite version 3.2.1 Enter ".help" for instructions sqlite> .tables hellos schema_info sqlite> .dump hellos BEGIN TRANSACTION; CREATE TABLE hellos ("id" INTEGER PRIMARY KEY NOT NULL, "name" varchar(255), "value" varchar(255)); COMMIT; sqlite> .exit $
ええと、とりあえず今作った model はナシとゆー事にしといて、スペジェネを探さねば。
$ rm db/dev.sqlite3.db $ ./script/destroy model Hello notempty db/migrate notempty db rm db/migrate/001_create_hellos.rb rm test/fixtures/hellos.yml rm test/unit/hello_test.rb rm app/models/hello.rb rmdir test/fixtures notempty test rmdir test/unit notempty test rmdir app/models notempty app $
migrate
もしかして obsolete だったりなんかするのかなぁ。舞波さんトコの最新記事の日付が 2006-02-04 だったりするな。気にせず入れてみるか。ってその前に model 作るの推奨と出ていますな。
いくつかポインタを列挙
うーん。GetText がなんやら、とあるが、面倒なのでスペシャルで。ここからは、くまくま本のナニを参照しつつ作業。まず検討したナニに沿って model 作成して migrate を作ってテーブル作成。
$ ./script/generate model Model create app/models/ create test/unit/ create test/fixtures/ create app/models/model.rb create test/unit/model_test.rb create test/fixtures/models.yml exists db/migrate create db/migrate/001_create_models.rb $ ./script/generate model Purchase exists app/models/ exists test/unit/ exists test/fixtures/ create app/models/purchase.rb create test/unit/purchase_test.rb create test/fixtures/purchases.yml exists db/migrate create db/migrate/002_create_purchases.rb $ ./script/generate model Use exists app/models/ exists test/unit/ exists test/fixtures/ create app/models/use.rb create test/unit/use_test.rb create test/fixtures/uses.yml exists db/migrate create db/migrate/003_create_uses.rb $ ./script/generate model Vendor exists app/models/ exists test/unit/ exists test/fixtures/ create app/models/vendor.rb create test/unit/vendor_test.rb create test/fixtures/vendors.yml exists db/migrate create db/migrate/004_create_vendors.rb $ ./script/generate model Maker exists app/models/ exists test/unit/ exists test/fixtures/ create app/models/maker.rb create test/unit/maker_test.rb create test/fixtures/makers.yml exists db/migrate create db/migrate/005_create_makers.rb $ ./script/generate model Type exists app/models/ exists test/unit/ exists test/fixtures/ create app/models/type.rb create test/unit/type_test.rb create test/fixtures/types.yml exists db/migrate create db/migrate/006_create_types.rb $
とりあえずできた。migrate までやっとくか。
db/migrate/001_create_models.rb
class CreateModels < ActiveRecord::Migration def self.up create_table :models do |t| # t.column :name, :string t.column :name, :string t.column :type_id, :integer t.column :use_id, :integer t.column :maker_id, :integer end end def self.down drop_table :models end end
db/migrate/002_create_purchases.rb
class CreatePurchases < ActiveRecord::Migration def self.up create_table :purchases do |t| # t.column :name, :string t.column :serial, :string t.column :no, :string t.column :purchased_at, :date t.column :model_id, :integer t.column :vendor_id, :integer t.column :status, :string end end def self.down drop_table :purchases end end
db/migrate/003_create_uses.rb
class CreateUses < ActiveRecord::Migration def self.up create_table :uses do |t| # t.column :name, :string t.column :name, :string end end def self.down drop_table :uses end end
db/migrate/004_create_vendors.rb
class CreateVendors < ActiveRecord::Migration def self.up create_table :vendors do |t| # t.column :name, :string t.column :name, :string end end def self.down drop_table :vendors end end
db/migrate/005_create_makers.rb
class CreateMakers < ActiveRecord::Migration def self.up create_table :makers do |t| # t.column :name, :string t.column :name, :string end end def self.down drop_table :makers end end
db/migrate/006_create_types.rb
class CreateTypes < ActiveRecord::Migration def self.up create_table :types do |t| # t.column :name, :string t.column :name, :string end end def self.down drop_table :types end end
冗長ですがご勘弁下さい。で、migrate 実行
$ rake db:migrate (in /home/xxx/proto) == CreateModels: migrating ==================================================== -- create_table(:models) -> 0.0217s == CreateModels: migrated (0.0224s) =========================================== == CreatePurchases: migrating ================================================= -- create_table(:purchases) -> 0.0222s == CreatePurchases: migrated (0.0230s) ======================================== == CreateUses: migrating ====================================================== -- create_table(:uses) -> 0.0229s == CreateUses: migrated (0.0236s) ============================================= == CreateVendors: migrating =================================================== -- create_table(:vendors) -> 0.0227s == CreateVendors: migrated (0.0235s) ========================================== == CreateMakers: migrating ==================================================== -- create_table(:makers) -> 0.0228s == CreateMakers: migrated (0.0235s) =========================================== == CreateTypes: migrating ===================================================== -- create_table(:types) -> 0.0227s == CreateTypes: migrated (0.0234s) ============================================ $
sqlite3 でも確認。
$ sqlite3 db/dev.sqlite3.db SQLite version 3.2.1 Enter ".help" for instructions sqlite> .tables makers purchases types vendors models schema_info uses sqlite> .exit $
スペジェネ
一応テーブルが六つできているので OK ってコトにしとこう。(何
で、ようやくスペジェネを install。
$ ./script/plugin install http://wota.jp/svn/rails/plugins/branches/stable/special (出力略 $ ls vendor/plugins/ special $
とりあえず、config/environment.rb の先頭に以下の記述を追加。
$KCODE = 'u'
カラム一つのソレで special してみる。
$ ./script/generate special Vendor (出力略 $
基本的に動くと見て、試験サーバ動かしてみる。
$ ./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-06-20 17:27:37] INFO WEBrick 1.3.1 [2007-06-20 17:27:37] INFO ruby 1.8.2 (2005-04-11) [i386-linux] [2007-06-20 17:27:37] INFO WEBrick::HTTPServer#start: pid=6198 port=3000
一応起動。開発ホストな 3000 番にアクセス。空ではあるが、情報出力。ローカライズは別途、とゆー事で関連情報をナニしてくれる部分についての盛り込みを。とりあえず、各 model に関連情報を記述。
修正結果はざくっと以下。
$ for i in app/models/* ; do echo $i; cat $i; echo; done app/models/maker.rb class Maker < ActiveRecord::Base has_many :models end app/models/model.rb class Model < ActiveRecord::Base has_many :purchases belongs_to :type belongs_to :use belongs_to :maker end app/models/purchase.rb class Purchase < ActiveRecord::Base belongs_to :model belongs_to :vendor end app/models/type.rb class Type < ActiveRecord::Base has_many :models end app/models/use.rb class Use < ActiveRecord::Base has_many :models end app/models/vendor.rb class Vendor < ActiveRecord::Base has_many :purchases end $
そろそろ「スペスペシャル」とか言わんといかんのかな (謎
それは良いとして、vendor は先程作成したのですが再度チャレンジ。
$ ./script/generate special Vendor The DL driver for sqlite3-ruby is deprecated and will be removed in a future release. Please update your installation to use the Native driver. Association Error: Purchase should belong to Vendor $
む。何だこれは。スペスペシャルを略したのが敗因ですか?
仕方がないので sqlite3-ruby を uninstall
# gem uninstall sqlite3-ruby Successfully uninstalled sqlite3-ruby version 1.2.1 #
で、WEBrick は動くかな??
$ ./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-06-20 17:53:03] INFO WEBrick 1.3.1 [2007-06-20 17:53:03] INFO ruby 1.8.2 (2005-04-11) [i386-linux] [2007-06-20 17:53:03] INFO WEBrick::HTTPServer#start: pid=6233 port=3000 [2007-06-20 17:53:07] INFO going to shutdown ... [2007-06-20 17:53:07] INFO WEBrick::HTTPServer#start done. $
動いてる。では、スペスペシャルに再度チャレンジ。
$ ./script/generate special Vendor /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require': no such file to load -- sqlite3 (MissingSourceFile) (以下略
駄目だ。ちょっと前に戻って、何故に sqlite3-ruby 入れたのか見てみると、migrate すん時に、だったのか。db 消して再度 migrate してみるか。
$ rm db/dev.sqlite3.db $ rake db:migrate (in /home/rms/proto) rake aborted! no such file to load -- sqlite3 (See full trace by running task with --trace) $
うーん。あちらを立てればこちらが立たず。rails のバージョンが微妙なのも原因??
つづき
再度、gem にて sqlite3-ruby を install 今度は 1.2.0 を入れています。又、model も微妙に修正。以下は修正したもののみ。
$ cat app/models/model.rb class Model < ActiveRecord::Base has_many :purchases belongs_to :type belongs_to :use belongs_to :maker end $ cat app/models/purchase.rb class Purchase < ActiveRecord::Base belongs_to :model belongs_to :vendor end $
で、migrate から再度実行。
$ rake db:migrate (略 $ ./script/generate special Vendor (略 $
上記のエラーメセジ (The DL driver for sqlite3-ruby 略) は出ていましたが、根本的な原因は belongs_to をカンマつなぎで書いていた事が判明。しかも、くまくま本を見るに has_many :through とかを使用した方が良さげ。がしかし、このまま継続。
再び
で、WEBrick 起動してブラウザで見たらオチてる。
<th><%= association_name(ref) %></th>
db/localized/vendors.yml に associations という定義が入っているはずですが無い、と。無理矢理入れたらブラウザでは表示できたんですが、一旦 destroy した方が良いのだろうか。ちなみに (O) なリンクを辿ると routing error になった。仕方無いので冒険がてら、やってみると
$ ./script/destroy special -r Vendor (出力略 $
どうも削除されている様子。で、再度 generate を。
$ ./script/generate special -r Vendor (略 $
で、再度 WEBrick 起動してブラウザ見てみると正常動作な模様。ちょっと現時点での保留事項を以下に整理
- Model と Purchase と Vendor は has_many :through な関連にした方が良さげ。一旦 Vendor なソレは再度 destroy して関連を調整した後に再度 generate ??
- ローカライズ
- Type とか Use とか Maker とかは ViwProperty なソレの方が ??
CRUD なインターフェースだけ完成させて、とっとと Django 方面に着手したい。ってか CRUD なインターフェースとか migrate なんかは rails で他は Django とか??
# びみょー