IISでRuby on Railsを使う


FastCgi を利用し、IIS7 上で Ruby on Rails を動かすまでの手順を説明します。

Ruby for IIS の導入及び web.config によるURL書き換えの設定、tmpフォルダの書き込み許可などがポイントとなります。

  1. ruby をインストール
    http://rubyforge.org/frs/?group_id=167&release_id=6672

    ダウンロードしたファイルを展開し、今回は C:\ruby にインストールしました。
  2. Rails をインストール
    以下のサイトを参考にインストール
    http://wiki.rubyonrails.org/getting-started/installation/windows

    Rails Wiki

    C:\ruby>path
    PATH=c:\ruby\bin; ….
    C:\ruby>gem update–system
    Updating RubyGems…
    RubyGems system software updated
    C:\ruby>gem install rails
    C:\ruby>rails myapp
    C:\ruby>cd myapp
    C:\ruby\myapp>ruby script/generate controller home index
    C:\ruby\myapp>ruby script/server

    コマンドプロプトにてまず、ruby へのパスを確認します。

    C:\ruby>path

    PATH=c:\ruby\bin; ….

    gem をupdate します。

    C:\ruby>gem update –system

    Updating RubyGems…

    Rails をインストールします。

    C:\ruby>gem install rails

    Rails がインストールできたら、動作確認のため簡単なアプリケーション作成します。

    C:\ruby>rails myapp

    C:\ruby>cd myapp

    C:\ruby\myapp>ruby script/generate controller home index

    作成したアプリケーションを ruby のWebrickサーバーで実行します。

    C:\ruby\myapp>ruby script/server

    以下のような画面の表示を確認します。


  3. Ruby for IIS ダウンロードしてインストール
  4. 参考             http://forums.iis.net/p/1154234/1889560.aspx#1889560

    ダウンロード http://ruslany.net/download/RubyForIIS-0.1.exe

    インストール時の画面

    インストール後の確認

    インストール時に指定したフォルダ(例 C:\Program Files (x86)\RubyForIIS) 以下に mod_fastcgi などのフォルダが作成されていることを確認します。

    また、コマンドラインからも簡単な動作の確認を行ないます。

    C:\ruby\myapp>irb
    irb(main):001:0> require ‘fcgi’
    => true
    irb(main):002:0>

  5. IIS マネージャーにて Webサイトの追加 を行ないます。

    ADD WEB SITE

    4.1 web.config   ( c:/ruby/myapp/publick/web.config  )を編集

    Rails 用のURL書き換え機能及び Ruby用のFastCgiの設定を web.configにより設定します。

    <?xml version="1.0" encoding="UTF-8"?>
    
    <configuration>
        <system.webServer>
            <handlers>
                <add name="ROR" path="dispatch.fcgi" verb="*" modules="FastCgiModule" scriptProcessor="C:\ruby\bin\ruby.exe|C:\ruby\myapp\public\dispatch.fcgi development" resourceType="Unspecified" requireAccess="Script" />
            </handlers>
            <rewrite>
                <rules>
                    <rule name="Imported Rule 1">
                        <match url="^$" ignoreCase="false" />
                        <action type="Rewrite" url="index.html" appendQueryString="true" />
                    </rule>
                    <rule name="Imported Rule 2">
                        <match url="^([^.]+)$" ignoreCase="false" />
                        <action type="Rewrite" url="{R:1}.html" appendQueryString="true" />
                    </rule>
                    <rule name="Imported Rule 3" stopProcessing="true">
                        <match url="^(.*)$" ignoreCase="false" />
                        <conditions logicalGrouping="MatchAll">
                            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" pattern="" ignoreCase="false" />
                        </conditions>
                        <action type="Rewrite" url="dispatch.fcgi" appendQueryString="true" />
                    </rule>
                </rules>
            </rewrite>
        </system.webServer>
    </configuration>

    4.2  IIS マネージャにより設定内容を確認

    Module Map

    FastCGI Setting

    URL Rewrite

  6. 動作確認下記のURLにアクセスし、 2. で動作確認したWebrick サーバーと同じ内容が表示されることを確認します。

    http://localhost:3001/home/index

    • - 以下のエラーの場合、

      下記のファイルの作成を確認します。

      c:/ruby/myapp/public/dispatch.rb

      #!c:/ruby/bin/ruby
      require File.dirname(__FILE__) + "/../config/environment" unless defined?(RAILS_ROOT)
      # If you're using RubyGems and mod_ruby, this require should be changed to an absolute path one, like:
      # "/usr/local/lib/ruby/gems/1.8/gems/rails-0.8.0/lib/dispatcher" -- otherwise performance is severely impaired
      require "dispatcher"
      ADDITIONAL_LOAD_PATHS.reverse.each { |dir| $:.unshift(dir) if File.directory?(dir) } if defined?(Apache::RubyRun)
      Dispatcher.dispatch

      c:/ruby/myapp/public/dispatch.fcgi

      #!c:/ruby/bin/ruby
      require File.dirname(__FILE__) + "/../config/environment"
      require 'fcgi_handler'
      RailsFCGIHandler.process!

    • - 500 Internal Error の場合
      以下のフォルダに変更権限を付与します。

      エクスプローラで下記のフォルダを選択し、右クリックで設定画面を開き、プロパティ –>セキュリティ にて IUSER  あるいは Everyone  にフルコントロールを許可します。

      C:\ruby\myapp\log
      C:\ruby\myapp\temp

以上


タグ:


コメント / トラックバック1件

  1. 田中 より:

    c:\> irb  実行の際に 「MSVCR71.DLL がみつかりません …」 の警告が表示された場合、
    SQL Server/80/Tools/Binn などからこの dll を ruby/bin などPATHの通ったところに
    コピーします。 
    最後の We’re Sorry のエラーもこの dll がないために発生していることがあります。

コメントをどうぞ