JRuby + Rails 3 + MySQL (Windows)
Windows上にJRuby + Rails 3 + MySQL環境をつくってみる。
Javaのインストール
JRubyは、JavaVM上で動作するRuby。そんなわけで、JRubyを実行するためには、あらかじめ、Javaをインストールしておく。Windows版のJavaでは、インストーラにしたがえばよい。
インストールがおわったら、
c:\>java -version java version "1.7.0" Java(TM) SE Runtime Environment (build 1.7.0-b147) Java HotSpot(TM) Client VM (build 21.0-b17, mixed mode, sharing) c:\>javac -version javac 1.7.0
JRubyのインストール
Home — JRuby.org
の
Downloads — JRuby.org
からJRubyをダウンロード。jruby-bin-1.6.3.zipを適当なディレクトリに展開する。
jruby-1.6.3\bin
にPATHをとおす。
自分の環境は、PATHがごちゃごちゃしすぎているので、単純なjruby-console.cmdファイルをつくっておく。
@echo off set JAVA_HOME=C:\Program Files\Java\jdk1.7.0 set PATH=%JAVA_HOME%\bin;%PATH% set JRUBY_HOME=C:\Application\ProgrammingLanguage\Ruby\JRuby\jruby-bin-1.6.3 set PATH=%JRUBY_HOME%\bin;%PATH% cd c:\ cmd
C:\>jruby -v jruby 1.6.3 (ruby-1.8.7-p330) (2011-07-07 965162f) (Java HotSpot(TM) Client VM 1 .7.0) [Windows XP-x86-java] C:\>jruby --1.9 -v jruby 1.6.3 (ruby-1.9.2-p136) (2011-07-07 965162f) (Java HotSpot(TM) Client VM 1 .7.0) [Windows XP-x86-java]
JRubyはインストール成功
MySQLのインストール
MySQL :: Download MySQL Community Server
からWindows (x86, 32-bit), MSI Installerをダウンロードする。
ダウンロードページのダウンロードボタンを押すと、すぐにダウンロードはできず、ログインやらユーザ登録やらをもとめる入力フォームのある画面に画面遷移するけど、とりあえず、とばして、画面下部のNo thanks, just take me to the downloads!リンクをクリック。
インストールは、インストーラにしたがえばよい。インストールは、MySQLのインストールとMySQL Server Instance Configuration Wizardの実行の2段階になっている。Configuration Wizardの途中で、データベースの文字コードをどうするか指定する。ここでは、文字コードは、UTF-8を指定しておく。latin1のままだと、そりゃもう文字化けしまくる。
インストーラが正常終了して、MySQLサーバが起動していれば、コマンドラインから
mysql -u root -p --no-beep
とやって、ログインできるはず。
一応、文字コードの設定を確認しておこう。
mysql> show variables like 'char%'; +--------------------------+---------------------------------------------------------+ | Variable_name | Value | +--------------------------+---------------------------------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | C:\Program Files\MySQL\MySQL Server 5.1\share\charsets\ | +--------------------------+---------------------------------------------------------+ 8 rows in set (0.00 sec)
Rails 3のインストール
インストール前に、一応、環境を確認しておくか。じぶんは、JRuby以外に、複数のRubyの実行環境をインストールして、なんどかはまってしまったので、びくびくしている。All about Ruby on Rails & Data recovery software RVMという複数のRuby環境を利用する便利な仕組みもあるようなのだが、いまは、いいや。
C:\>gem environment RubyGems Environment: - RUBYGEMS VERSION: 1.5.1 - RUBY VERSION: 1.8.7 (2011-07-07 patchlevel 330) [java] - INSTALLATION DIRECTORY: C:/Application/ProgrammingLanguage/Ruby/JRuby/jruby-bin-1.6.3/lib/ruby/gems/1.8 - RUBY EXECUTABLE: C:/Application/ProgrammingLanguage/Ruby/JRuby/jruby-bin-1.6.3/bin/jruby.exe - EXECUTABLE DIRECTORY: C:/Application/ProgrammingLanguage/Ruby/JRuby/jruby-bin-1.6.3/bin C:\>jruby --1.9 -S gem environment RubyGems Environment: - RUBYGEMS VERSION: 1.5.1 - RUBY VERSION: 1.9.2 (2011-07-07 patchlevel 330) [java] - INSTALLATION DIRECTORY: C:/Application/ProgrammingLanguage/Ruby/JRuby/jruby-bin-1.6.3/lib/ruby/gems/1.8 - RUBY EXECUTABLE: C:/Application/ProgrammingLanguage/Ruby/JRuby/jruby-bin-1.6.3/bin/jruby.exe - EXECUTABLE DIRECTORY: C:/Application/ProgrammingLanguage/Ruby/JRuby/jruby-bin-1.6.3/bin
gemでインストールする。jrubyには、もともとgemがふくまれている。
C:\>gem -v 1.5.1
gem自体のバージョンはもっとあがっていて、gem自体のアップグレードもgemでできるようなのだけど、とりあえずこのままいこう。
gem自体のupdateをするなら
C:\>jruby -S gem update --system .... C:\>gem -v
こちらは、古いバージョンの場合らしい。
C:\>jruby -S gem install rubygems-update .... C:\>jruby -S update_rubygems .... C:\>gem -v
また、なんどか、Rubyの実行環境 + Railsをインストールした経験では、gemやらgemでインストールするライブラリやらのバージョンのせいで、なぞのエラーがでることがけっこうあった。でも、ここでは、とりあえず気にしないでいこう。なにかあったらそのとき調べるさー。
以下は、Rubyのバージョン、1.9を意識して、1.9でコマンドたたくくせをつけようとして、1.9をつけてるのだけど、あんまり意味なかったみたい。どこで、どうすれば、効くのやら。
追記
JRuby 1.6.7とかだと、.jrubyrcファイルを作業ディレクトリか、ホームディレクトリにおいて、
compat.version = 1.9
と書いておくと、jrubyがデフォルトでruby 1.9互換で起動するようになる。
C:\>jruby --1.9 -S gem install rails Fetching: activesupport-3.0.9.gem (100%) Fetching: builder-2.1.2.gem (100%) Fetching: i18n-0.5.0.gem (100%) Fetching: activemodel-3.0.9.gem (100%) Fetching: rack-1.2.3.gem (100%) Fetching: rack-test-0.5.7.gem (100%) Fetching: rack-mount-0.6.14.gem (100%) Fetching: tzinfo-0.3.29.gem (100%) Fetching: abstract-1.0.0.gem (100%) Fetching: erubis-2.6.6.gem (100%) Fetching: actionpack-3.0.9.gem (100%) Fetching: arel-2.0.10.gem (100%) Fetching: activerecord-3.0.9.gem (100%) Fetching: activeresource-3.0.9.gem (100%) Fetching: mime-types-1.16.gem (100%) Fetching: polyglot-0.3.2.gem (100%) Fetching: treetop-1.4.10.gem (100%) Fetching: mail-2.2.19.gem (100%) Fetching: actionmailer-3.0.9.gem (100%) Fetching: thor-0.14.6.gem (100%) Fetching: rdoc-3.9.2.gem (100%) Depending on your version of ruby, you may need to install ruby rdoc/ri data: <= 1.8.6 : unsupported = 1.8.7 : gem install rdoc-data; rdoc-data --install = 1.9.1 : gem install rdoc-data; rdoc-data --install >= 1.9.2 : nothing to do! Yay! Fetching: railties-3.0.9.gem (100%) Fetching: bundler-1.0.17.gem (100%) Fetching: rails-3.0.9.gem (100%) Successfully installed activesupport-3.0.9 Successfully installed builder-2.1.2 Successfully installed i18n-0.5.0 Successfully installed activemodel-3.0.9 Successfully installed rack-1.2.3 Successfully installed rack-test-0.5.7 Successfully installed rack-mount-0.6.14 Successfully installed tzinfo-0.3.29 Successfully installed abstract-1.0.0 Successfully installed erubis-2.6.6 Successfully installed actionpack-3.0.9 Successfully installed arel-2.0.10 Successfully installed activerecord-3.0.9 Successfully installed activeresource-3.0.9 Successfully installed mime-types-1.16 Successfully installed polyglot-0.3.2 Successfully installed treetop-1.4.10 Successfully installed mail-2.2.19 Successfully installed actionmailer-3.0.9 Successfully installed thor-0.14.6 Successfully installed rdoc-3.9.2 Successfully installed railties-3.0.9 Successfully installed bundler-1.0.17 Successfully installed rails-3.0.9 24 gems installed C:\>gem list *** LOCAL GEMS *** abstract (1.0.0) actionmailer (3.0.9) actionpack (3.0.9) activemodel (3.0.9) activerecord (3.0.9) activerecord-jdbc-adapter (1.1.3) activerecord-jdbcmysql-adapter (1.1.3) activeresource (3.0.9) activesupport (3.0.9) arel (2.0.10) builder (2.1.2) bundler (1.0.17) erubis (2.6.6) i18n (0.5.0) jdbc-mysql (5.1.13) mail (2.2.19) mime-types (1.16) polyglot (0.3.2) rack (1.2.3) rack-mount (0.6.14) rack-test (0.5.7) rails (3.0.9) railties (3.0.9) rake (0.8.7) rdoc (3.9.2) sources (0.0.1) thor (0.14.6) treetop (1.4.10) tzinfo (0.3.29) C:\>gem which rails C:/Application/ProgrammingLanguage/Ruby/JRuby/jruby-bin-1.6.3/lib/ruby/gems/1.8/gems/railties-3.0.9/lib/rails.rb
railsをインストールできたようだ。
jruby --1.9 -S とかやっても、1.9にはならないのだな。じぶん、なにかをかん違いしてたか。
rails.vim
vimで作業するつもりなので、rails.vimをいれておこう。ちょっとキーバインドをおぼえれば、ファイルを開くのがとってもかんたんになる。
rails.vim - Ruby on Rails: easy file navigation, enhanced syntax highlighting, and more : vim online
プロジェクトの作成と動作確認
参考
Getting Started with Rails — Ruby on Rails Guides
本家のチュートリアル。Rails 3対応。自分は、Railsの実務経験はないのだけど、Rails 2の本は3冊ぐらい読んでおり、最低限の知識はあったので、このチュートリアルでけっこうわかった。
http://blog.everyleaf.com/27538644
Windows + Ruby + Rails 3 + MySQLの環境をつくっている。
プロジェクトの作成
さっそく、サンプルアプリをつくってみる。Hello, Wolrd!という言葉が好きなので、helloworldプロジェクトを作成する。
C:\>rails new helloworld -d mysql create create README create Rakefile create config.ru create .gitignore create Gemfile create app create app/controllers/application_controller.rb create app/helpers/application_helper.rb create app/mailers create app/models create app/views/layouts/application.html.erb create config create config/routes.rb create config/application.rb create config/environment.rb create config/environments create config/environments/development.rb create config/environments/production.rb create config/environments/test.rb create config/initializers create config/initializers/backtrace_silencers.rb create config/initializers/inflections.rb create config/initializers/mime_types.rb create config/initializers/secret_token.rb create config/initializers/session_store.rb create config/locales create config/locales/en.yml create config/boot.rb create config/database.yml create db create db/seeds.rb create doc create doc/README_FOR_APP create lib create lib/tasks create lib/tasks/.gitkeep create log create log/server.log create log/production.log create log/development.log create log/test.log create public create public/404.html create public/422.html create public/500.html create public/favicon.ico create public/index.html create public/robots.txt create public/images create public/images/rails.png create public/stylesheets create public/stylesheets/.gitkeep create public/javascripts create public/javascripts/application.js create public/javascripts/controls.js create public/javascripts/dragdrop.js create public/javascripts/effects.js create public/javascripts/prototype.js create public/javascripts/rails.js create script create script/rails create test create test/fixtures create test/functional create test/integration create test/performance/browsing_test.rb create test/test_helper.rb create test/unit create tmp create tmp/sessions create tmp/sockets create tmp/cache create tmp/pids create vendor/plugins create vendor/plugins/.gitkeep
これも
C:\>rails new helloworld -d mysql
ではなくて
C:\>jruby -S rails new helloworld -d mysql
としたほうがよかったのかな。まあいいや。
プロジェクトを作成したら、ためしに、railsでよくやる基本の動作確認。Webサーバ起動
C:\>cd helloworld C:\helloworld>jruby --1.9 -S script\rails server .... この辺の文字をはてなの日記にはりつけると日記が文字化けるのでやめておく。 ....
おっと、起動失敗。日記が文字化けするからはりつけなかったけど、エラーメッセージを見る限り、mysql関連の設定が必要なようだ。必要なライブラリをgemでインストールして、さらにDBの接続設定も必要。
さてさてさて、どうすればよいのだろう。
JRubyなので、Javaの仕組みで、つまりJDBCでアクセスできるようになっていると前になにかの記事で読んだことがある。
ライブラリを求めて、activerecord-jdbcmysql-adapter | RubyGems.org | your community gem hostから、さらにhttp://jruby-extras.rubyforge.org/ActiveRecord-JDBC/へいくとサンプルが書いてある。
こいつも、gemでインストールだ。
C:\helloworld>jruby --1.9 -S gem install activerecord-jdbc-adapter Fetching: activerecord-jdbc-adapter-1.1.3.gem (100%) Successfully installed activerecord-jdbc-adapter-1.1.3 1 gem installed C:\helloworld>jruby --1.9 -S gem install activerecord-jdbcmysql-adapter Fetching: jdbc-mysql-5.1.13.gem (100%) Fetching: activerecord-jdbcmysql-adapter-1.1.3.gem (100%) Successfully installed jdbc-mysql-5.1.13 Successfully installed activerecord-jdbcmysql-adapter-1.1.3 2 gems installed
Railsではこいつをどうやって利用するのかかも検索して、それらしい説明をしてくれているページを探す。。。。
設定ファイルの編集
- helloworld/Gemfile
- 依存ライブラリの設定
RubyというかRails 3というかGem Bundler – Manage your Ruby gemsの設定ファイルらしい。ここに依存ライブラリを書いておけばよいようだ。
RubyとRubyGemのしくみさえわすれていて、なんのことかピンとこなくて、どはまりした。それは、別の日記に書くとしよう。
MySQLに接続するためのライブラリを指定しておく。
Rubyでは、MySQLに接続するためのライブラリ自体が何種類かあるようだ。search | RubyGems.org | your community gem host うーん。。。。JavaのJDBCのような統一されたインタフェースがないのだろうか。。。。自分のようなRubyの経験が浅いものにとっては、混乱のもとになってしまう。
ここでは、gemでインストールしたJDBCドライバをつかえるように指定する。
.... #gem 'mysql2', '~> 0.2.6' gem 'activerecord-jdbc-adapter' gem 'activerecord-jdbcmysql-adapter' gem 'jdbc-mysql',:require=>false ....
上では、gemでインストールしてから、Gemfileを修正しているけれども、Rails 3には、bundle installという便利コマンドがあるらしい。Gemfileに書いてあるものをbundle installでインストールしてくれるらしい。
- helloworld/config/database.yml
- DB接続の設定
自分の環境に合わせて修正する。
.... test: adapter: jdbcmysql encoding: utf8 reconnect: false database: helloworld_test pool: 5 username: ユーザ password: パスワード host: localhost ....
C:\helloworld>jruby --1.9 -S script\rails server => Booting WEBrick => Rails 3.0.9 application starting in development on http://0.0.0.0:3000 => Call with -d to detach => Ctrl-C to shutdown server [2011-08-15 17:06:52] INFO WEBrick 1.3.1 [2011-08-15 17:06:53] INFO ruby 1.9.2 (2011-07-07) [java] [2011-08-15 17:06:53] INFO WEBrick::HTTPServer#start: pid=388 port=3000
rails serverだけだと、--1.9を指定しても、1.8.7で起動した。
script\rails serverとしたら、1.9.2で起動した。なぜ?
http://localhost:3000/
ブラウザでおなじみの画面が開けた。
さてさてさて、これで、開発できるのか?
scaffoldで自動生成
ひとまず、DBをつくっておこう。
C:\helloworld>rake db:create (in C:/helloworld)
mysql> show databases; +------------------------+ | Database | +------------------------+ | information_schema | | helloworld_development | | mysql | | performance_schema | | test | +------------------------+ 5 rows in set (0.06 sec)
config/database.ymlにあるデータベース名でつくってくれるらしい。
すくなくとも、rakeからはMySQLにつながったようだ。
rakeも、Railsとは、もともと別の、Rubyのライブラリで、Antみたいに作業を自動化するためのライブラリらしい。
Railsの、なんでもRubyでやっちゃう姿勢は、ある種の爽快感を感じないでもないけど、やっぱり勉強することが盛りだくさんになるなあ。
どうも、集中力が続かず、ふらふらとしてしまうな。DBに接続できたので、scaffoldで、MVC関連のソースコードとかテーブル定義とか生成してみる。
PersonモデルにPersonテーブルをつくってみる。
C:\helloworld>rails generate scaffold Person name:string age:integer
invoke active_record
create db/migrate/20110815090448_create_people.rb
create app/models/person.rb
invoke test_unit
create test/unit/person_test.rb
create test/fixtures/people.yml
route resources :people
invoke scaffold_controller
create app/controllers/people_controller.rb
invoke erb
create app/views/people
create app/views/people/index.html.erb
create app/views/people/edit.html.erb
create app/views/people/show.html.erb
create app/views/people/new.html.erb
create app/views/people/_form.html.erb
invoke test_unit
create test/functional/people_controller_test.rb
invoke helper
create app/helpers/people_helper.rb
invoke test_unit
create test/unit/helpers/people_helper_test.rb
invoke stylesheets
create public/stylesheets/scaffold.css
Personについて、app/models/person.rbや、MVCのソースコードが一括で生成された。
- Model
- app/controllers/people_controller.rb
- View
- app/views/people/*.html.erb
- Controller
- app/controllers/people_controller.rb
テストコードやテストデータまで生成されてるし。
- テーブル定義
- db/migrate/20110815090448_create_people.rb
もある。
テーブル定義をDBに反映する。
C:\helloworld>rake db:migrate (in C:/helloworld) == CreatePeople: migrating =================================================== -- create_table(:people) -> 0.1550s -> 0 rows == CreatePeople: migrated (0.1550s) ==========================================
mysqlクライアントから確認。
mysql> use helloworld_development Database changed mysql> show tables; +----------------------------------+ | Tables_in_helloworld_development | +----------------------------------+ | people | | schema_migrations | +----------------------------------+ 2 rows in set (0.02 sec) mysql> desc people; +------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(255) | YES | | NULL | | | age | int(11) | YES | | NULL | | | created_at | datetime | YES | | NULL | | | updated_at | datetime | YES | | NULL | | +------------+--------------+------+-----+---------+----------------+ 5 rows in set (0.03 sec)
ちゃんと、できているようだ。
動作確認
ふたたびWebサーバ起動
C:\helloworld>jruby --1.9 -S script\rails server => Booting WEBrick => Rails 3.0.9 application starting in development on http://0.0.0.0:3000 => Call with -d to detach => Ctrl-C to shutdown server [2011-08-15 18:14:12] INFO WEBrick 1.3.1 [2011-08-15 18:14:12] INFO ruby 1.9.2 (2011-07-07) [java] [2011-08-15 18:14:12] INFO WEBrick::HTTPServer#start: pid=3424 port=3000
ブラウザからhttp://localhost:3000/peopleを開く
開けた。
ブラウザからデータを登録してみると、登録もOK!
うまくうごいたようだ。
mysqlクライアントで中身も確認してみる。
mysql> set names sjis; Query OK, 0 rows affected (0.00 sec) mysql> select * from people; +----+------------+------+---------------------+---------------------+ | id | name | age | created_at | updated_at | +----+------------+------+---------------------+---------------------+ | 1 | こんにちは | 10 | 2011-08-15 09:22:49 | 2011-08-15 09:23:30 | | 2 | 世界 | 20 | 2011-08-15 09:23:13 | 2011-08-15 09:23:13 | +----+------------+------+---------------------+---------------------+ 2 rows in set (0.05 sec)
できてるてきてる。
これで、最低限の開発環境はできた。
開発環境というより勉強環境か。
つぎは、実際の運用環境をおさえたいな
- Webサーバはなにをつかっているのか?
- Javaのアプリケーションサーバで動かすには?