Servlet Garden

Java, Web Application and beyond

Flower

Archive for January, 2008

Let’s Try Rails 2.0.2 with NetBeans 6.1 and JRuby1.1RC1

NetBeans 6.1のnightly build版を使って、Rails 2.0.2を動かしてみました。”Hello World’を動かせるところまでやってくるのに必要だったセットアップなどをメモしておこうと思います。

  1. NetBeans 6.1をインストールする
    http://bits.netbeans.org/download/trunk/nightly/latest/からNetBeans 6.1をダウンロードしてインストールします。私が試したのは2008年1月9日版の全てのパッケージがそろっているAllです。
  2. JRuby1.1RC1を使えるようにする
    NetBeans 6.1についてくるのはJRuby 1.0.3なので、JRuby 1.1RC1を使えるようにします。

    http://dist.codehaus.org/jruby/からJRuby 1.1RC1をダウンロードして適当なディレクトリに展開します。私の場合、/home/yoko/toolsに展開したので、ここにjruby-1.1rc1というディレクトリが作られました。各種JARアーカイブやgemなどは /home/yoko/tools/jruby-1.1rc1というディレクトリ以下にあります。

    NetBeans 6.1にはRuby Platoform Managerが追加されたので、これを使ってJRuby 1.1RC1を追加します。NetBeansのToolsから Ruby Platforms を選択するとこのようなウィンドウが開きます。NetBeans 6.1 Ruby Platform ManagerAdd Platform…ボタンをクリックすると、ファイルを選択できるウィンドウが開くので、JRuby 1.1RC1のbinディレクトリにあるjruby(インタープリタ)を選択します。NetBeans 6.1 Ruby Platform Manager - adding new version of JRubyすると、gemのディレクトリが自動的に設定されこのようなウィンドウが表示されます。NetBeans 6.1 Ruby Platform Manager - added JRuby 1.1RC1Platform nameとしてjruby(1.8.6)が自動的に設定されています。今後、この名前でJRuby 1.1RC1を参照するようになります。

        

  3. 必要そうなGemをインストールする
    JRuby 1.1RC1に最初から入っているgemはrake(0.8.1), rspec(1.1.1), sources(0.0.1)だけなので必要なgemを追加していきます。NetBeansのToolsからRuby Gemsを選択するとgem管理のウィンドウが開きます。Ruby Platformのところで、先ほど設定したjruby(1.8.6)を選ぶと、JRuby 1.1RC1用のGem Homeが自動的に設定されます。私の環境では/home/yoko/tools/jruby-1.1RC1/lib/ruby/gems/1.8です。

    New Gemsのタブをクリックするとgemの一覧が表示されるので、インストールするgemを選択して、一覧の下にあるInstallボタンをクリックします。まずはrailsを選んでInstallボタンをクリックし、Latestバージョンと依存関係のInclude(ディフォルト)を指定してOKをクリックすると、このようなウィンドウが表示されrails関連gem一式がインストールされます。NetBeans 6.1 Installing rails gem他に、mongrel, ActiveRecord-JDBC, active-record-jdbc-adapterなどをインストールしました。 Installedのタブをクリックすると、このように表示されます。NetBeans 6.1 Installed gems

        

  4. Railsプロジェクトを作る
    http://wiki.rubyonrails.org/rails/pages/Tutorialを参考にしてRailsを動かしてみます。まずはRailsプロジェクトを作ります。NetBeansでFile -> New Project… -> Ruby -> Ruby on Rails Application -> Nextとするとプロジェクト名などを指定するウィンドウが開きます。ここで、Project NameにMyProject, Access Database Using JDBCとAdd Rake Targets to Support App Server Development(.war)にチェックし、Ruby Platfromのところでjruby(1.8.6)を選択します。Warファイルを作るrakeというのはGoldspikeのことです。NetBeans 6.1 Creating Rails Project

    Access Databaseにチェックしておくと、config/environment.rbにこのようなJDBCを利用する設定が自動的に追加されます。

    # Inserted by NetBeans Ruby support to support JRuby
    if RUBY_PLATFORM =~ /java/
      require 'rubygems'
      gem 'ActiveRecord-JDBC'
      require 'jdbc_adapter'
    end
  5. データベースを設定する
    Railsチュートリアルにはデータベース関係の設定には触れられていませんが、database.ymlとこれに対応したデータベースが無いとアプリケーションが動かないので、設定しておきます。まずは、database.ymlをこのように修正しました。

    development:
      adapter: mysql
      encoding: utf8
      database: MyProject_development
      username: foo
      password: bar
      # JRuby doesn't support socket:
      host: localhost
      #socket: /var/run/mysqld/mysqld.sock
    
    test:
      adapter: mysql
      encoding: utf8
      database: MyProject_test
      username: foo
      password: bar
      socket: /var/run/mysqld/mysqld.sock
    
    production:
      adapter: mysql
      encoding: utf8
      database: MyProject_production
      username: foo
      password: bar
      socket: /var/run/mysqld/mysqld.sock

    MySQLにデータベースを作れる権限があるユーザ名、パスワードをdatabase.ymlに書き込んでおくとrake db:create(NetBeansでは MyProjectを選択して右クリック -> Run Rake Task -> db -> create)で作れるのですが、今回はデータベース作成は手で行いました。

    yoko@alcyone:~$ mysql -uroot -p
    Enter password:
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 809 to server version: 5.0.24a-Debian_9ubuntu2.2-log
    
    Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
    
    mysql> create database MyProject_development default character set utf8;
    Query OK, 1 row affected (0.00 sec)
    
    mysql> create database MyProject_test default character set utf8;
    Query OK, 1 row affected (0.00 sec)
    
    mysql> create database MyProject_production default character set utf8;
    Query OK, 1 row affected (0.00 sec)
    
    mysql> grant all on MyProject_development.* to foo@localhost identified by 'bar';
    Query OK, 0 rows affected (0.04 sec)
    
    mysql> grant all on MyProject_test.* to foo@localhost identified by 'bar';
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> grant all on MyProject_production.* to foo@localhost identified by 'bar';
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> quit
    Bye
  6. コントローラを自動生成させる
    MyProjectのコントローラを作ります。以前は、コントローラの名前を指定するだけで自動生成させてコントローラ名_controller.rbの中で scaffoldと指定していたのですが、Rails 2.0.2にはこのscaffoldメソッドがありません。代わりにcontrollerを生成するときに、viewを指定するようになったようです。

    コントローラを作るにはNetBeansでMyProject選択、右クリック -> Generate… とすると、コード自動生成のためのウィンドウが開くので、Generateでcontrollerを選択して、Nameにhello, Viewsにindexと入力し、OKをクリックします。NetBeans 6.1 Creating Rails’ Controllerすると、いくつかのファイルが生成されますが、hello_controller.rbはこのようなコードになっています。

    class HelloController < ApplicationController
    
      def index
      end
    
    end
  7. アプリケーションを実行する
    アプリケーションを実行するにはNetBeansで MyProject選択、右クリック -> Runを選択します。Mongrelのgemをインストールしてあるので、何もしなくてもWEBrickに代わってMongrelが起動されます。NetBeansのOutputウィンドウに表示されるタブにはあいかわらずWEBrickとあるのですが、ログを見るとMongerlが動いていることがわかります。

    => Booting Mongrel (use 'script/server webrick' to force WEBrick)
    => Rails application starting on http://0.0.0.0:3000
    => Call with -d to detach
    => Ctrl-C to shutdown server
    ** Starting Mongrel listening at 0.0.0.0:3000
    ** Starting Rails with development environment...
    ** Rails loaded.
    ** Loading any Rails specific GemPlugins
    The signal USR1 is in use by the JVM and will not work correctly on this platform
    ** Signals ready.  TERM => stop.  USR2 => restart.  INT => stop (no restart).
    ** Rails signals registered.  HUP => reload (without restart).  It might not work well.
    ** Mongrel 1.1.3 available at 0.0.0.0:3000
    ** Use CTRL-C to stop.

    NetBeansでのMongrelの使用についてはhttp://wiki.netbeans.org/wiki/view/FaqRailsMongrelを参考にしてください。

    本来はこれで、ディフォルトのWebページがブラウザに表示されるところですが、上記のFAQにあるように、Mongrelの場合は自動的に表示されないので、http://localhost:3000/と手入力して表示させるしかありません。いずれ、このバグは修正されるはずです。

    http://localhost:3000/helloをブラウザからリクエストしてみましょう。すると、ブラウザにはチュートリアルにあるとおり、このように表示されました。NetBeans 6.1 Simple Output from Rails Project

  8. アプリケーションに修正を加える
    チュートリアルにあるように修正してみます。NetBeansでMyProject以下にあるControllersを開いて、hello_controller.rb を選択して右クリック -> Openとすると、このファイルがエディタに表示されるので、このようにworldメソッドを追加しました。

    class HelloController < ApplicationController
    
      def index
      end
    
      def world
        @greeting = "こんにちは世界"
      end
    end

    次にERBファイルを作ります。NetBeansでMyProject以下のViewsを開き、helloを選択して右クリック -> New -> ERB File...と進みます。ERBファイル作成のウィンドウが表示されるので、File Nameに world.htmlと入力してFinishをクリックします。NetBeans 6.1 Creating Rails’ ERB Fileworld.html.erbファイルがエディタに表示されるので、このようにコントローラで定義した変数を表示できるようにしました。

    <%#
    # To change this template, choose Tools | Templates
    # and open the template in the editor.
    %>
    
    <%= @greeting %>
  9. 修正したアプリケーションを実行する
    ブラウザから http://localhost:3000/hello/world/ をリクエストすると、このように表示されます。Mongrelを再起動する必要はありません。NetBeans 6.1 Running Simple Sample

以上で、NetBeans 6.1でRails 2.0.2の簡単なアプリケーションを動かせることが確認できました。