2004 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 04 | 05 | 06 | 07 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2013 | 01 | 02 | 04 | 06 |
2008-12-28
■[ruby]Windows に Ruby on Rails 2.2 + MySQL 5.x 環境を構築する手順とハマり所
始めに
Windows 環境で Rails 2.2 を使える環境を作ろうとしたところ、MySQL5.1 を使用するとライブラリの関係で正しく動作しないという事象が発生したので、ゼロから環境を構築する手順と合わせてハマり所を記載しておく。
ちなみに、Rails 2.2 であることが原因では無い(ハズ)なので、勘違いしないよう、ご注意ください。
Ruby 環境のインストール
Ruby 本体のインストール
上記から Ruby 1.8.7 の mswin 版 zip を取得する。
今回は C:\ 直下に ruby フォルダを作成しておく事にした。追加するPATHは C:\Ruby\bin となる。
さて、PATHが通っているか確認してみよう。
C:\>ruby -v
ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-mswin32]
大丈夫なようだ。
RubyGems のインストール
上記から 1.3.1 の zip ファイルを取得する。
展開したら setup.rb を実行する。
C:\rubygems-1.3.1>ruby setup.rb
C:\rubygems-1.3.1>gem -v
1.3.1
おお、インストールされたっぽい。
不足する DLL を追加する
ここから以下を取得する。 readline は今回は不要だけど、irb を使用するときに必要になるので今のうちに取得しておく。
- http://jarp.does.notwork.org/win32/openssl-0.9.8d-2-mswin32.zip
- http://jarp.does.notwork.org/win32/zlib-1.1.4-1-mswin32.zip
- http://jarp.does.notwork.org/win32/readline-4.3-2-mswin32.zip
これらをDLしたら展開したそれぞれのフォルダの bin フォルダにある dll ファイルを、 Ruby の bin フォルダ(今回の場合は c:\ruby\bin)へコピーする*1。
ここまでできたら基本的な Ruby 環境の構築は完了。
iconv のインストール
このままだと iconv ライブラリが Windows 自体にインストールされていないので、 Rails を構築したりするとエラーになるのでインストールする。
ここの「iconv package with simple installation instructions」となっているリンクから zip をDLし、 README にある通りに so と dll をコピーする。
自分の環境では iconv.so は既にあったので下記の二つのファイルを Ruby の bin フォルダ コピーしておく*2。
- charset.dll
- iconv.dll
Rails 環境のインストール
gem でインストールする。
C:\rubygems-1.3.1>gem install rails
Successfully installed rake-0.8.3
:
Installing RDoc documentation for activeresource-2.2.2...
できたっぽい。
C:\rubygems-1.3.1>rails -v
Rails 2.2.2
ちゃんとインストールされたようだ。
サンプルプロジェクトを作る
DB はまだだけど、一旦 Rails が正しく動作するかの検証を含めて rails コマンドで雛形を作ってみる。
今回は C:\rails_test フォルダを作成し、その中で sample プロジェクトを生成する
C:\rails_test>rails -d mysql sample
:
正しくできたようだ。
試しにサーバを起動してみる。
C:\rails_test>cd sample
C:\rails_test\sample>ruby script\server
=> Booting WEBrick...
=> Rails 2.2.2 application started on http://0.0.0.0:3000
=> Ctrl-C to shutdown server; call with --help for options
[2008-12-25 03:08:58] INFO WEBrick 1.3.1
[2008-12-25 03:08:58] INFO ruby 1.8.7 (2008-08-11) [i386-mswin32]
[2008-12-25 03:08:59] INFO WEBrick::HTTPServer#start: pid=3388 port=3000
ちゃんと起動した。
MySQL ドライバのインストール
ちょっと忘れていたのだけど、今のところ MySQL へ接続するためのドライバをインストールしていなかった。
gem でインストールすれば良いので特に困ることは無いはず(エラーが出るけど、ドキュメント生成の部分なので放置)。
C:\rails_test\sample>gem install mysql
Successfully installed mysql-2.7.3-x86-mswin32
1 gem installed
Installing ri documentation for mysql-2.7.3-x86-mswin32...
Installing RDoc documentation for mysql-2.7.3-x86-mswin32...
ERROR: While generating documentation for mysql-2.7.3-x86-mswin32
... MESSAGE: Unhandled special: Special: type=17, text=""
... RDOC args: --op c:/ruby/lib/ruby/gems/1.8/doc/mysql-2.7.3-x86-mswin32/rdoc --exclude ext --main README --quiet ext README docs/README.html
(continuing with the rest of the installation)
MySQL5.0 のインストール
このエントリの冒頭で書いたとおり、 現在の Windows 環境では MySQL 5.1 は地雷なので、5.0 を入れる。
今回は下記のバージョンを使用した。
ちなみに、リンクの画面の下のほうにある
っていうリンクをクリックするとアカウントを登録しないでも DL ができるよ*3。
dll が無いよ云々のエラーを見たくない人は、インストールするときに MySQL のパスを 環境変数に追加するチェックを入れておくと良いです。
ちなみに 5.1 を入れちゃった場合
MySQL 5.1 がインストールされている状態で rails を動かすとこんな感じのエラーになってしまう。
db:migrate で以下のようなエラーになる。
C:\rails_test\sample>rake db:migrate
(in C:/rails_test/sample)
rake aborted!
undefined method `each' for #<Mysql:0x488b61c>
(See full trace by running task with --trace)
--trace を付けるとこんな感じ。
C:\rails_test\sample>rake db:migrate --trace
(in C:/rails_test/sample)
** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:migrate
== CreateUsers: migrating ====================================================
-- create_table(:users)
-> 0.0940s
== CreateUsers: migrated (0.0940s) ===========================================
** Invoke db:schema:dump (first_time)
** Invoke environment
** Execute db:schema:dump
rake aborted!
Mysql::Error: Commands out of sync; you can't run this command now: SHOW TABLES
c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/connection_adapters/abstract_adapter.rb:188:in `log'
c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/connection_adapters/mysql_adapter.rb:309:in `execute'
c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/connection_adapters/mysql_adapter.rb:414:in `tables'
c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/schema_dumper.rb:61:in `tables'
c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/schema_dumper.rb:23:in `dump'
c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/schema_dumper.rb:17:in `dump'
c:/ruby/lib/ruby/gems/1.8/gems/rails-2.2.2/lib/tasks/databases.rake:246
c:/ruby/lib/ruby/gems/1.8/gems/rails-2.2.2/lib/tasks/databases.rake:245:in `open'
c:/ruby/lib/ruby/gems/1.8/gems/rails-2.2.2/lib/tasks/databases.rake:245
c:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:617:in `call'
c:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:617:in `execute'
c:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:612:in `each'
c:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:612:in `execute'
c:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:578:in `invoke_with_call_chain'
c:/ruby/lib/ruby/1.8/monitor.rb:242:in `synchronize'
c:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:571:in `invoke_with_call_chain'
c:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:564:in `invoke'
c:/ruby/lib/ruby/gems/1.8/gems/rails-2.2.2/lib/tasks/databases.rake:112
c:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:617:in `call'
c:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:617:in `execute'
c:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:612:in `each'
c:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:612:in `execute'
c:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:578:in `invoke_with_call_chain'
c:/ruby/lib/ruby/1.8/monitor.rb:242:in `synchronize'
c:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:571:in `invoke_with_call_chain'
c:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:564:in `invoke'
c:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:2019:in `invoke_task'
c:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:1997:in `top_level'
c:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:1997:in `each'
c:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:1997:in `top_level'
c:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:2036:in `standard_exception_handling'
c:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:1991:in `top_level'
c:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:1970:in `run'
c:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:2036:in `standard_exception_handling'
c:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:1967:in `run'
c:/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/bin/rake:31
c:/ruby/bin/rake:19:in `load'
c:/ruby/bin/rake:19
一見、ちゃんとテーブルは作成されているので、なんとなく動かせるじゃん? とか思うのだけど、適当なデータを追加してから(要するに select で 0 件以上のデータの場合に)画面へ表示させようとすると、以下のようなエラーになってしまう。
どうも select 時のカラムを取り出すところでおかしくなっている模様。
一応、検索に引っかかるようにエラーの文章も書いておく。
ArgumentError in UsersController#show
NULL pointer given
RAILS_ROOT: C:/rails_test/sample
Application Trace | Framework Trace | Full Trace
(eval):3:in `each_hash'
(eval):3:in `all_hashes'
app/controllers/users_controller.rb:16:in `show'
Request
Parameters:
{"id"=>"1"}
Show session dump
Headers:
{"Content-Type"=>"",
"cookie"=>[],
"Cache-Control"=>"no-cache"}
Linux 環境等なら、 gem でインストールした MySQL のドライバをソースからコンパイルする等して新しいバージョン(最新だと 2.8 が出ている)をインストールすれば使えるようになるかもしれない。
ただ、Winodws 環境だとそもそものコンパイル環境を構築するのがちょっとした障壁になるので、5.1に過剰な思い入れのある人意外は大人しく 5.0 系を使うようにすると良いと思います。
i18n 対応scaffold するよー
さあ、これでようやく Rails を使う環境にたどり着いた。
ここからはお約束の scaffold なのだけど、 Rails 2.2 からは 国際化対応(i18n)とやらがされているので、i18n対応の scaffold でサンプルアプリケーションを作ってみるよ。
参考サイト:no title
i18n 用 scaffold を使えるようにする
手順は上記のサイトにある通り、 gem に github のリポジトリを追加してから、ライブラリをインストールすれば良い
C:\rails_test\sample>gem so -a http://gems.github.com
http://gems.github.com added to sources
C:\rails_test\sample>gem i amatsuda-i18n_generators
Successfully installed gettext-1.93.0
Successfully installed amatsuda-i18n_generators-0.4.0
2 gems installed
Installing ri documentation for gettext-1.93.0...
Installing RDoc documentation for gettext-1.93.0...
これで、 scaffold が i18n 用のテンプレートをジェネレートしてくれるようになる。
i18n 対応 scaffold でアプリを作る
ようやくここまで来た。長い。長すぎる。。。大体、MySQL5.1を使ってハマっちゃったよーあはは、という話を書きたかっただけなのに、随分と話が膨らんだよ\(^o^)/
というわけで、 i18n 用 scaffold こと、 i18n_scaffold を実行する(普段は scaffold ってタイプする所が変わってる)
i18n_scaffold を実行
C:\rails_test\sample>ruby script\generate i18n_scaffold user name:string age:integer comment:text
exists app/models/
exists app/controllers/
exists app/helpers/
create app/views/users
exists app/views/layouts/
exists test/functional/
exists test/unit/
exists public/stylesheets/
create app/views/users/index.html.erb
create app/views/users/show.html.erb
create app/views/users/new.html.erb
create app/views/users/edit.html.erb
create app/views/layouts/users.html.erb
create public/stylesheets/scaffold.css
create app/controllers/users_controller.rb
create test/functional/users_controller_test.rb
create app/helpers/users_helper.rb
route map.resources :users
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/user.rb
create test/unit/user_test.rb
create test/fixtures/users.yml
create db/migrate
create db/migrate/20081228150911_create_users.rb
無事に作成されたもよう。このまま、DBのマイグレを行う
DBテーブル作成
DBの定義を作る前に、 config/database.yml を確認して、ユーザ名やパスワードを変更しておいてから、下記を実行する。
今回はスキーマが無いのでスキーマの作成*4も実行しているよ。
C:\rails_test\sample>rake db:create
(in C:/rails_test/sample)
これでスキーマは作成された。
今度は migrate でテーブルを作成する。
C:\rails_test\sample>rake db:migrate
(in C:/rails_test/sample)
== CreateUsers: migrating ====================================================
-- create_table(:users)
-> 0.0630s
== CreateUsers: migrated (0.0780s) ===========================================
ここで一旦動作確認
まだ i18n の国際化には触れていないものの、これで普通に動作する雛形は作られたので一旦、確認してみる。
C:\rails_test\sample>ruby script\server
=> Booting WEBrick...
=> Rails 2.2.2 application started on http://0.0.0.0:3000
=> Ctrl-C to shutdown server; call with --help for options
[2008-12-29 00:39:52] INFO WEBrick 1.3.1
[2008-12-29 00:39:52] INFO ruby 1.8.7 (2008-08-11) [i386-mswin32]
[2008-12-29 00:39:52] INFO WEBrick::HTTPServer#start: pid=3716 port=3000
サーバーを起動させたら、 http://localhost:3000/users にアクセスしてみる。
無事にアクセスできた。一件、データを追加してみる。
おお、無事に追加することもできた!
国際化してみる
generate i18n で日本語リソースファイルの雛形を作成する。
C:\rails_test\sample>ruby script/generate i18n ja
exists config/locales
update config/environment.rb
create config/locales/ja.yml
debug 1 models found.
debug 19 translation keys found in views.
debug translating activerecord.models.user ...
debug translating activerecord.attributes.user.name ...
debug translating activerecord.attributes.user.age ...
debug translating activerecord.attributes.user.comment ...
debug translating activerecord.attributes.user.created_at ...
debug translating activerecord.attributes.user.updated_at ...
debug translating railties.scaffold.editing ...
debug translating railties.scaffold.show ...
debug translating railties.scaffold.back ...
debug translating railties.scaffold.new ...
debug translating railties.scaffold.listing ...
debug translating railties.scaffold.edit ...
debug took 0.796 secs to translate.
create config/locales/translation_ja.yml
注意
数日前に実行した時はこのままで国際化ができたのだけど、今日試したところ、上記で生成される config/locales/ja.yml がどう見てもオカシイです。本当にありがとうございました。
ja.yml を ja.html にして表示したらこんなのですよ。どう見てもリソースファイルではございません。
なので、ja.yml は en.yml をコピーして en: を ja: に修正することでお茶を濁しておく。。。
※amatsuda-i18n_generators-0.4.0 のソースを見た感じ、 github からファイルのテンプレートをダウンロードしてきて、それをファイルに吐いているようだけど、その参照先ファイルが移動しているために起こっているっぽい。
ちょっと突っかかったけれど、これで再度、サーバを立ち上げてみよう
おおお、日本語化されている!
自分好みに日本語化してみる
単語があまりに直訳なので、自分で修正してみる。
config/locales/translation_ja.yml の日本語部分を修正してみる。ついでに、Destroy が日本語化されていないので、これも追加してみる。
ja: activerecord: models: user: "ユーザ" attributes: user: name: "名前" age: "年齢" comment: "意気込みをどうぞ!" # 修正 created_at: "に作られた" updated_at: "で更新" railties: scaffold: editing: "編集" show: "閲覧" # 修正 back: "戻る" listing: "一覧" new: "新規作成" # 修正 edit: "編集" destroy: "削除" # 追加
これで、また rails の画面を見てみよう。
おおぉ! 変更されている!
ちなみに、ここのマッピングは view を見てみるとわかると思うけれど、 translate メソッドの一番目の引数が該当する模様。
ついでに
国際化ということで、今はデフォルトが日本語だけど、英語版に切り替えるテストを行ってみる。
これは config/environment.rb の(おれの環境だと)51行目の default_locale で指定している。今は下記のように記載されているので
config.i18n.default_locale = 'ja'
これを
config.i18n.default_locale = 'en'
こうして、再度 http://localhost:3000/users にアクセスしてみる。
おお、瞬く間に英語版に!!!!
まとめ
*1:基本的にはPATHが通っている場所ならどこでも良いみたい
*2:サイトによっては c:\windows\system32 にコピーしろと書いてあるけれど、これも PATH が通っていれば場所はどこでも良いので、 Ruby で必要なものは Ruby 内に固めておくことにする
*3:おれは長い間気が付かなかった…
*4:db:create
- src’s note - 気になる技術メモ
- まさにっき(コードで世界を変えたい人の記録) - MacOSX での Rail...
- [Ruby on Rails]Windows環境での Rails2.2 + MySQL5.1
- ナカオ日記−フリーランスの轍 - 1月24日にRBCの勉強会をします!!
- そうだ車輪と名付けよう2nd - イケテルRails勉強会@福岡に参加して...
- ソースコード備忘録 - Ruby on Rails + MySQL5.0
- ソースコード備忘録 - [プログラミング]
- 猫本棚 - Rails本で実習 続き
- 猫本棚 - [ひみつ活動][Ruby][Rails] Rails本で実習 続き
- actionscriptを勉強したいwebぷろぐらま - windowsにruby on rails...
- actionscriptを勉強したいwebぷろぐらま
- まさにっき(コードで世界を変えたい人の記録) - ruby gems が使え...
- 賽を投げられたら、匙を投げて生きていく日記 - Ruby on Railsをや...
- 418 ぼくは teapot。 - Redmineインストールメモ
- cimada-ism - rails環境の整備
- 徒然なるままに - 【インターン】8日目:駄目だ…
- 361 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CDMQFjAA&url=http://d.hatena.ne.jp/seiunsky/20081228/1230485404&ei=1rooT7TOG4WsiQKu4cjQCg&usg=AFQjCNFyMUAxzSLWCWfgcdnMe4RL0b4XHQ&sig2=hVb_T3i36UB74SxOZ6Ec9A
- 285 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja-JP-mac:official&hs=G2o&q=eclipse+日本語化+mac&btnG=検索&lr=lang_ja
- 285 http://www.google.co.jp/search?q=rails+mysql&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:ja:unofficial&client=firefox-a
- 285 http://www.google.co.jp/url?sa=t&rct=j&q=rails mysql&source=web&cd=1&sqi=2&ved=0CCcQFjAA&url=http://d.hatena.ne.jp/seiunsky/20081228/1230485404&ei=f9-FTv_FGu3tmAXlt6Eb&usg=AFQjCNFyMUAxzSLWCWfgcdnMe4RL0b4XHQ&sig2=xwcGlewpvJWHyTrB0kIOPQ
- 259 http://tobysoft.net/wiki/index.php?Redmine/インストールメモ
- 229 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4IBMA_jaJP305JP266&q=Ruby+on+rails
- 176 http://b.hatena.ne.jp/entry/d.hatena.ne.jp/seiunsky/20081228/1230485404
- 175 http://www.google.co.jp/search?sourceid=chrome&ie=UTF-8&q=rails+mysql
- 144 http://www.google.co.jp/search?hl=ja&q=rails+mysql&aq=f&aqi=g10&aql=&oq=&gs_rfai=
- 143 http://blog.mwsoft.jp/article/29663775.html












