Ruby on Rails on Windows Azure (2)


前回のエントリーでは、能楽堂の概要と特徴を説明して、RailsアプリケーションをWindows Azureに配置する場合に考えた目標を説明しました。なぜ、このような目標を考えたのかを最初に説明します。Ruby on RailsをWindows Azureで動作させる情報は、検索するとたくさん見つけつることができます。たとえば、Ruby on Rails in Windows Azure などでは、RubyのインストールからRails環境の構築と Windows Azureへ配置するための Azure用のアプリケーション パッケージの作成方法までを解説しています。この方法でも、技術的にはRailsがWindows Azureで動作するという観点からは良くできていると私も考えています。でも、Railsアプリケーションを開発されている方の立場になって考えた場合は、どうなんだろうという疑問があるのも事実です。私が考えるRailsアプリケーションの開発者は、アプリケーションの開発から運用を以下の手順で行うと思います。

  • 開発環境の準備(RubyやRuby on Rails、データベース環境)。
  • Railsアプリケーションの開発とテスト
  • 本番環境への配置
    自前でサーバーを用意するか、ホスティング環境を用意して、環境を整えてからアプリケーションを配置

このように考えた場合に、Windows Azure アプリケーション開発環境を理解するというのはRailsアプリケーション開発以外に学ばないといけない知識になってくるわけです。つまり、余計な負担が生じてしまうのです。もちろん、採用したプラットフォームを最大限に生かすのであれば、それらの知識は必要不可欠です。でも、Railsアプリケーションのホスティング先としてのWindows Azureを考えた場合は、必要のない知識だと言えるでしょう。このように考えた結果が、RailsアプリケーションをWindows Azureへ配置するためのツールとして NougakuDo Companionの設計目標にまりました。つまり、NougakuDo Comapnionを使う上で、利用者が学ぶべき知識は以下の事柄になります。

  • Windows Azure コンピュートサービスの製品知識(仮想マシンのサイズなど)とVisual Studio 2010の操作
    Visual Studio のプロジェクト プロパティで仮想マシンサイズを変更して、設定情報を変更できる。
    Visual Studio でAzure用のアプリケーションパッケージの作成ができる。
  • Windows Azure 管理ポータルの使用方法
  • ストレージ サービスの使用方法(たとえば、Azure Storage Explorerなどのツールの操作)

つまり、Windows Azure のWeb ロールなどの知識やC#などのプログラミング言語の知識がなくても、Visual Studioの操作方法とWindows Azure管理ポータルを使った操作ができれば、RailsアプリケーションをWindows Azureへ配置することができるようになります。この程度であれば、セルフサービスとしてのホスティング環境として多くの人に検討してもらえるのではないか、と考えたことがNougakuDo Comapnionの設計目標になったのです。

NougakuDo Comapnionの最初のプレビューが動き出したのが、Ruby会議2011の直前だったことは前回のエントリーに記載しました。もちろん、この時点ではNougakuDo Companionという名前もなく、配置ツールとして最小限の機能だけで管理用のツールも無い状態でした。それから、配置ツールとしての基本機能の実装が完了したのが7月末でした。次に取り掛かったのが、管理機能のユーザーインターフェースで、アルファ版としてはASP.NET MVC 2で実装しました。基本的な管理機能の実装と合わせて、配置ツールの機能拡充が完了したのが、8月の初めで、使用したAzure SDKは1.4でAzure Tools は1.3でした。この頃にリリースされた能楽堂のバージョンは、1.0.4だったと記憶しています。また、Azure Toolsも1.4がリリースされていましたので、開発環境をAzure SDK 1.4とAzure Tools for Visual Studio 2010 1.4へ切り替えて、管理機能をASP.NET MVC 3へとバージョンアップしました。この理由は、能楽堂のポリシーと同じで、その時期に入手できる最適な環境で開発するということを前提にしていたからです。また、この時期にブレークスルーキャンプに参加してRuby on Railsで開発しているチームにヘルパーツールとして早期リリースとして提供しました。彼らのフィードバックから、NougakuDo Comapnionの改善や機能追加を行ったのはいうまでもありません。8月の後半になると、能楽堂も1.0.5がリリースされて、9月にブレークスルーキャンプの決勝がありますから、それまでにNougakuDo Companionを完成させなければなりません。そうして、リリースしたのがRC3になります。このRC3からが、codeplexで一般公開したバージョンになります。

次に大きな機能改善として、能楽堂が1.1になりました。能楽堂1.1系は、それまでの1.0系と違ってEnnouによる仮想ホスト機能のサポートが入りました。仮想ホスト機能とは、artonさんの言葉を借りればApache をリバースプロキシとして動作させてPassengerなどでRailsを動かす、Railsの黄金パターンになります。つまり、Ruby on Rails環境を作るための定石が、能楽堂によってサポートされたのです。この仮想ホスト機能に対して、能楽堂1.0系がサポートしていたのがサブディレクトリー機能になります。つまり、URLを使って表記すると以下のようになります。

  • 仮想ホスト機能:http://  ホスト名 /
  • サブディレクトリー機能: http:// ホスト名 /アプリケーションルート

それとRuby on Railsが3.0.xから3.1系にバージョンアップしたのも、能楽堂1.1系になります。能楽堂1.1系に対応するために、NougakuDo Companionでも仮想ホスト機能のサポート機能を追加しながら、artonさんと協力しながら能楽堂1.1系のブラッシュアップを行っていたのが、ちょうどうMicrosoft Conference 2011の頃になります。中でも、Rails 3.1系での相対ディレクトリーモードでは、かなりartonさんにお世話になりました。ホワイトペーパーに書かれていますが、Ruby on Railsは、仮想ホストを中核としていますが、相対ディレクトリーもサポートしています。しかし、Ennou1.1で思うように相対ディレクトリー サポートが動作しなかったことから、Railsのデバッグを含めて様々な改善を行って頂いた結果として、Ennou1.2となり能楽堂1.1.7へのリリースへとなりました。能楽堂1.1.7をサポートすべく、NougakuDo Companion もRC4のリリースをしました。これが、ホワイトペパーの最終確認をしていた時期になります。公開したホワイトペーパーがまとまった時点で、最終的な動作確認を行っていた時に、SQL Azureへの接続に問題があることを発見しました。色々と調べた結果、activerecord-sqlserver-adapterにバグが入り込んでいることを見つけました。具体的には、以下のような状況でした。

  • 3.0.15:Rails 3.0対応で問題は無い。
  • 3.1.0と3.1.1:DBCC command 'useroptions'のエラーが発生。
  • 3.1.2:バグ対処済み。

この問題は、日付型の書式を設定する機能が追加されており、この機能を実現するために「DBCC useroptions」コマンドを無条件に呼び出していることが原因でした。この問題をactiverecord-sqlserver-adapterの開発チームにバグ報告をしてから、ホワイトペーパーには暫定パッチを掲載して公開作業に入りました。最終的には、開発チーム側でバグ対処済みの3.1.2がリリースされており、次の能楽堂に含まれる予定となっています。また、暫定パッチはNougakuDo Companion RC4のソースツリーにも入れていますので、パッチを使うことで問題なくSQL Azureを使用することができるようになっています。次回は、NougakuDo Companionの具体的な説明をする予定です。

Comments (0)

Skip to main content