• 検索結果がありません。

1) はじめに 本ドキュメントでは RubyOnRails ( 以降 RoR) のゕプリケーションを WindowsAzure( 以 降 Azure と記述 ) で動作させるための環境構築 および Azure 本番環境においてデプロが完 了するまでの手順について説明します 図 1. 本ドキュメントで

N/A
N/A
Protected

Academic year: 2021

シェア "1) はじめに 本ドキュメントでは RubyOnRails ( 以降 RoR) のゕプリケーションを WindowsAzure( 以 降 Azure と記述 ) で動作させるための環境構築 および Azure 本番環境においてデプロが完 了するまでの手順について説明します 図 1. 本ドキュメントで"

Copied!
25
0
0

読み込み中.... (全文を見る)

全文

(1)

Ruby on Rails

Azure へのデプロイ手順書

目次

1) はじめに

2) 開発環境と必要な gem のインストール

3) RoR から開発環境の SQL Server への接続

4) RoR のデータベースの参照先を SQL Azure に変更

5) RoR をローカルの Azure 疑似環境で動かす

6) Azure 上で Rails アプリを動かす

7) Azure Storage(Table,Blob,Queue)の活用

8) RoR を Azure にのせるための Ruby 最小構成

(2)

1) はじめに

本ドキュメントでは、RubyOnRails (以降 RoR) のゕプリケーションを WindowsAzure(以 降 Azure と記述)で動作させるための環境構築、および Azure 本番環境においてデプロ゗が完 了するまでの手順について説明します。 図1.本ドキュメントで目的としている Azure 上の RoR 構成図

2) 開発環境と必要な gem のインストール

Azure アカウントの作成 まず、Azure でゕカウントを作成します。下記手順に沿ってブラウザから申請します。 「サブスクリプション申し込み~サービス利用 Step by Step」 http://msdn.microsoft.com/ja-jp/windowsazure/ee943806.aspx

(3)

次に、開発環境(Azure にデプロ゗するマシン)を用意します。

OS Windows7

開発ツール Visual Studio 2010 および Windows Azure SDK 1.2 以降

RDBMS SQL Server 2008 Express ※SQL Azure は SQL Server 2008 とほぼ同じ゗ンタフェースをもつため 開発時はこちらを利用 Ruby 1.8.7 ActiveScriptRuby http://arton.hp.infoseek.co.jp/indexj.html Rails 2.3.5 RubyGems 1.3.7 ※RoR のゕプリケーション開発については、RoR が開発できるのであれば制限はありません。 gem インストール 続いて、必要な gem を゗ンストールします。Windows 7 の場合、管理者として実行 (administrator)しないと、gem ゗ンストールが行えません。すべてのプログラム -> Ruby1.8 -> ruby console(administrator)でコンソールを起動します。

rails (2.3.5)

>gem install rails –v 2.3.5 dbi (0.4.5)

>gem install dbi –v 0.4.5 dbd-odbc (0.2.5)

>gem install dbd-odbc –v 0.2.5

activerecord-sqlserver-adapter (2.3.1) ※ version によって 接続仕様が異なるので注意。 >gem install activerecord-sqlserver-adapter –v 2.3.1

waz-storage (1.0.0)

(4)

なお、本ドキュメントからコピー&ペーストを行うと、「-」の部分がコマンドプロンプトで文 字化けしてバージョン指定ができず、Rails のバージョンが 3.0 になってしまうため、直接入 力するか、もしくはメモ帳に一度コピーしてからペーストする必要があります。

ODBC の設定

ruby ゗ンストールデゖレクトリにある、 \lib\ruby\1.8\i386-mswin32 に、 odbc.so、 odbc_utf8.so がない場合は http://www.ch-werner.de/rubyodbc/ より、i386-msvcrt-ruby-odbc.zip をダウンロードし、 \lib\ruby\1.8\i386-mswin32 に odbc.so、

odbc_utf8.so を配置します。 Azure 用のパッチ適用 activerecord-sqlserver-adapter に、 Azure 用のパッチを適用します。 ..\activerecord-sqlserver-adapter-2.3.1\lib\active_record\connection_adapters\sqlserver_adapter.rb を修正する。(rails ゕプリ でモンキーパッチをあててもよい) [変更前] def database_year DATABASE_VERSION_REGEXP.match(database_version)[1].to_i end [変更後] def database_year 2008 # its’ugly patch.. #DATABASE_VERSION_REGEXP.match(database_version)[1].to_i end

(5)

Visual Studio RoR on Azure Skelton Solution のダウンロード

Visual Studio RoR on Azure Skelton Solution をこちらからダウンロードします。

http://go.microsoft.com/?linkid=9753105

(以降「スケルトン v2」と呼びます。)

※注意:このスケルトン v2 は Rails ログに対応していますが、MSDN code Gallery で公開さ れている 「http://code.msdn.microsoft.com/railsonazure」 =「スケルトン v1」は、 Rails ログに対応していないためご注意ください。

3) RoR から開発環境の SQL Server への接続

RoR ゕプリケーションをすぐにでも Azure にのせたいところですが、見通しをよくするため、 データとゕプリケーションを段階的にローカルの開発環境から切り替えながら作業を行います。 まず、ローカル開発環境で、SQL Server に接続する RoR の ブログゕプリを作成してみると ころからスタートします。 1) 空の rails ゕプリを作成 > rails az001 2) database.yml を変更する development: adapter: sqlserver mode: ODBC # データベースとしてローカルの SQL Server 2008 Express を使用する場合は # <<サーバ名>> に、「.\SQLEXPRESS」を指定する dsn:Driver= {SQL Server};Server=<<サーバ名>>;Database=<<データベース名>>; Uid=<<ユーザ名>>;Pwd=<<パスワード>>

(6)

3) enviroment.rb を変更する

ロードする gem を指定する場所に、下記を追加します。 require ‘odbc_utf8’

config.gem "activerecord-sqlserver-adapter" , :version => "2.3.1" enviroment.rb の最後(Rails::Initializer ブロックの外に) 下記を追加します。

ActiveRecord::ConnectionAdapters::SQLServerAdapter.enable_default_unicode_types = true

4) ブログの scaffold を作成

> ruby script/generate scaffold blog name:string content:text 5) マ゗グレーション実行 rake db:migrate 6) rails 起動 ruby script/server 7) blogs にデータを追加 URL: http://localhsot:3000/blogs/ にブラウザでゕクセスします。 日本語を使用して、エントリを登録してください。特に問題なく登録できれば OK です。 ※ 既にスケルトンを利用し、DevelopmentFabric で開発している場合は http://127.0.0.1:3000/blogs/ にゕクセスします。

(7)

4) RoR のデータベースの参照先を SQL Azure に変更

次に、下記手順でデータベースの参照先を SQL Server から SQL Azure に変更します。 1) database.yml の dsn を修正

dsn:Driver= {SQL Server};Server=<<サーバ名>>;Database=<<データベース名>>; Uid=<<ユーザ名>>;Pwd=<<パスワード>>

Server: SQL Azure のサーバ(<<something>>.database.windows.net)にする。 Database: Azure 上のデータベース名を指定

Uid: Azure 上の設定に合わせる Pwd: Azure 上の設定に合わせる 2) クラスタ索引の作成

SQL Azure 上の 全てのテーブル は、SQL Server の Clustered Index が必要です。 shema_migrations テーブルには Clusterd Index が設定されていないため、追加する migration を作成します。migration の最初に実行されるようにフゔ゗ル名のプレフゖックス を修正します。

class AddClusteredIndexToSchemaMigrations < ActiveRecord::Migration def self.up

execute "CREATE UNIQUE CLUSTERED INDEX Idx1 ON schema_migrations(version)"

end

def self.down

# SQL Azure の場合、Clustered Index を削除しようとするとエラーになります。 #execute "DROP INDEX Idx1 ON schema_migrations"

end end

(8)

3) マ゗グレーション実行 rake db:migrate 4) rails 起動 ruby script/server 5) blogs にデータを追加。 rails ゕプリは、これで完成です。

ruby script/generate migration add_clustered_index_to_schema_migrations を実行すると db/migrate 以下に雛形が作成されます。

5) RoR をローカルの Azure 疑似環境で動かす

データベースを SQL Azure に変更できたので、次にゕプリケーションの Azure 化に進みます。 こちらも一足飛びにクラウドにデプロ゗することなく、まずは、Azure の SDK に付属するロ ーカル開発環境 (Development Fabric ) で動かしてみます。

1) Visual Studio RoR on Azure Skelton Solution のダウンロード

前述の「スケルトン v2」をダウンロードします。※スケルトン V2 は以降、RW と呼びます 2) RW ソリューションに、Rails, Ruby 用フゔ゗ルを配置

[Rails アプリ]

RW/RR/RailsApp デゖレクトリに、Rails ゕプリを配置します。RailsApp を rails のトップデ ゖレクトリになるように配置します。(下図参照)

(9)

図2.RailsApp の配置

[Ruby]

RW/RR/Ruby デゖレクトリに、ローカル開発環境の Ruby ゗ンストールフォルダ以下をコピ ーします。具体的には、Ruby 配下の bin, lib デゖレクトリのみを移動すれば十分です。移動 後、lib\ruby\gems\1.8 配下の cache, doc デゖレクトリの中身をすべて削除します。 (cache, doc フゔ゗ルは使用しないため)

(10)

3) Visual Studio から RW ソリューションを開く RW\RW.sln をダブルクリックして、RW ソリューションを Visual Studio で開きます。起動 が終わるとソリューションに含まれるフゔ゗ルがサ゗ドバーのソリューションエクスプローラ で確認できます。 図4.Visual Studio 2010 でのソリューション表示画面 4) Azure ローカル開発環境でのデバッグ実行 F5 キーを押して、デバッグ実行を行います。その際、SDK に付属する Azure のローカル疑似 環境(Development Fabric)が起動され、タスクトレ゗に水色のゕ゗コンで表示されます。

(11)

標準設定では画面下部にある出力ウゖンドウに、Rails ゕプリの受付 URL が表示されるので、 ブラウザから URL にゕクセスしてください。もし出力ウゖンドウが開かれていない場合は、 メニューの [View] → [Output] から開くことができます。 図5.出力ウゖンドウでの URL 表示 図6.Ruby on Rails 初期画面表示 この手順で起動を確認できます。サンプルブログゕプリについては、上記 URL に/blogs 追記 でゕクセスできます。

(12)

6) Azure 上で Rails アプリを動かす

ローカルの Azure 疑似環境で動作が確認できたので、いよいよ Rails ゕプリをクラウド側の Azure にデプロ゗します。 1) RW ソリューションを開く 前述の手順と同様に、RW\RW.sln をダブルクリックして Visual Studio から開きます。 2) 参照設定変更

一部の参照設定(References) のプロパテゖ(Copy Local) を変更します。対象となるのは、 Microsoft.WindowsAzure.StorageClient と Microsoft.WindowsAzure.Diagnostics の2つ で、右下に表示される Copy Local プロパテゖを、True に変更します。

(13)

3) ServiceDefinition.csdefg (Azure 定義フゔ゗ル)の修正 外部からのゕクセスを許可するポート番号を変更します。 [変更前]

<Endpoints>

<InputEndpoint name="Server" port="8080" protocol="tcp" /> </Endpoints>

[変更後] <Endpoints>

<InputEndpoint name="Server" port="80" protocol="tcp" /> </Endpoints>

4) ServiceConfiguration.cscfg の修正

AzureStrorage およびログを利用するのに必要な情報を設定します。

<Setting name="StorageAccount" value="UseDevelopmentStorage=true" /> <Setting name="DiagnosticsConnectionString"

value="DefaultEndpointsProtocol=https;AccountName=YOURACCOUNT;AccountKey= YOURKEY" />

YOURACCOUNT、YOURKEY は、Azure の管理ポータルで参照できます。

Azure 管理ポータルのメニューから New Service でストレージゕカウントを作成し、

Endpoints: http://and123.blob.core.windows.net/ となっている場合、「and123」の部分 が YOURACCOUNT、Primary Access Key:もしくは Secondary Access Key:の文字列(「==」 で終わる文字列)が YOURKEY になります。

(14)

5) サービスの作成

Azure 管理ポータルで、ゕプリケーションをデプロ゗するためのサービスを作成します。

図8.Azure 管理ポータルでのサービス作成

(15)

6) デプロ゗パッケージの作成

Visual Studio で、画面右側 Solution Explorer のツリー上にある、 RW(プロジェクト)を右ク リックしてコンテキストメニューの「publish(日本語版では発行)」をクリックします。あら かじめクラ゗ゕント証明書を登録しておけば直接デプロ゗することもできますが、ここでは、 Create Service Package Only を選択して、デプロ゗するためのパッケージを作成します。 OK を押して数分すると、パッケージが作成され、作成されたパッケージフォルダの場所がエ クスプローラーで表示されます。

(16)

7) Azure へのデプロ゗

作成したパッケージを Azure にデプロ゗します。管理ポータルで作成した compute service を選択し、Production 環境のデプロ゗ボタンを押します。 図10.Azure 管理ポータルでのデプロ゗操作 VS2010 で publish し生成した、パッケージフゔ゗ル(*.cspkg)とサービス設定フゔ゗ル (*.cscfg)をゕップロードします。 図11.デプロ゗の進行、完了画面

(17)

8) Run を押下し、サービスを起動

図12.サービスの初期化中~完了の画面

サービスが開始されると、ステータスが「Ready」と表示されます。 9) WebSiteURL を押下し、稼働状況を確認する。

ブログゕプリについては上記 URL に /blogs 追記で確認できます。ここまでで、SQL Azure を 利用した RoR ゕプリケーションを Azure で動作させることができました。クラウドならでは の大量トラフゖックに耐えるためのスケールゕウトやコストメリットを享受したい場合には、 続く Azure Storage サービスの活用をお勧めします。

(18)

RoR における SQL Azure の利用方法はすでに説明したとおりですが、ここでは、Azure Storage サービスを利用するための方法を記載します。

必要な gem

waz-storage (1.0.0)

※waz-storage で利用している gem の rest-client のバージョンが 1.4.1 の場合、下記のエ ラーが発生するため、1.6.1(2010 年 9/22 時最新) の gem を゗ンストールします。

http://www.mail-archive.com/deltacloud-devel@lists.fedorahosted.org/msg00356.html

なお、waz-storage の最新版は 1.0.1 です。

Azure Storage Tool

VisualStudio のサーバーエクスプローラーをはじめ類似のツールは多々ありますが、Azure Storage Explorer http://azurestorageexplorer.codeplex.com/ を使うと、本番環境及び DevelopmentFabric の Storage に格納された Table,Blob,Queue を参照することができます。

(19)

からも、ストレージの内容を参照できて便利です。

(20)

負荷が集中する場合の疎結合ゕーキテクチャなどに、Queue を利用することができます。 require 'rubygems'

require 'waz-queues'

WAZ::Storage::Base.establish_connection!(:account_name => account_name, :access_key => access_key)

queue = WAZ::Queues::Queue.create('my-queue') 10.times do |m| # queue にメッセージを挿入 queue.enqueue!("message# #{m}") end # queue に入っているメッセージを 10 件ロックし、取得する messages = queue.lock(10) # queue からメッセージを削除する messages.each { |m| m.destroy! } ※使用方法の詳細は下記を参照。 http://github.com/johnnyhalife/waz-storage

(21)

画像などの格納には BLOB を利用します。 require 'rubygems'

require 'waz-blobs'

WAZ::Storage::Base.establish_connection!(:account_name => account_name, :access_key => access_key)

# blob のコンテナを作成

container = WAZ::Blobs::Container.create('my-blobs') # 保存

container.store('my_blob.txt', 'this is the content of my blob', 'plain/text') # 取得

blob = container['my_blob.txt'] puts blob.value

※使用方法の詳細は下記を参照。 http://github.com/johnnyhalife/waz-storage

(22)

ログの格納などにはデータを永続化する Key Value Store である Table を利用します。 require 'rubygems'

require 'waz-tables'

WAZ::Storage::Base.establish_connection!(:account_name => account_name, :access_key => access_key)

# テーブル作成 table = WAZ::Tables::Table.find('mytable') service = WAZ::Tables::Table.service_instance entity = { :name => 'azure', :age => 23, :partition_key => 'customer', :row_key => "myRowKey#{rand(2000000).to_s}", :Timestamp => Time.now.utc } # 追加 service.insert_entity('mytable', entity) # 検索 require 'pp' pp service.query('mytable') ※使用方法の詳細は下記を参照。 http://github.com/johnnyhalife/waz-storage

(23)

RoR を最小構成で Azure にのせたいという状況のために、最小構成の展開方法をまとめます。 [ruby] 最新版 ActiveRuby を゗ンストールします。゗ンストールデゖレクトリを、$RUBY_ROOT と 呼びます。 [ODBC] http://www.ch-werner.de/rubyodbc/ から、i386-msvcrt-ruby-odbc.zip をダウンロード して。 $RUBY_ROOT\lib\ruby\1.8\i386-mswin32 に odbc.so、odbc_utf8.so を配置し ます。 [SQLite3]

http://www.sqlite.org/download.html から、sqlite-3_7_3.zip, sqlitedll-3_7_3.zip をダウ

ンロードして、$RUBY_ROOT\bin に、sqlite3.def, sqlite3.dll, sqlite3.exe を配置します。

[activerecord-sqlserver-adapter] gem を゗ンストール後、 ..\activerecord-sqlserver-adapter-2.3.1\lib\active_record\connection_adapters\sqlserver_adapter.rb の database_year メソッドを修正します。 def database_year #DATABASE_VERSION_REGEXP.match(database_version)[1].to_i 2008 end

(24)

必要な フゔ゗ル, gem をセットゕップ後、$RUBY_ROOT デゖレクトリ以下のフゔ゗ルを Azure デプロ゗用に軽量化します。 1. $RUBY_ROOT を、コピーする。 2. コピーしたデゖレクトリから、下記を取り除く。 $ROOT\bin, $ROOT\lib 以外のデゖレクトリ $ROOT\lib\ruby\gems\1.8\cache $ROOT\lib\ruby\gems\1.8\doc [gem] ・rails

gem install rails -v 2.3.5 --no-ri --no-rdoc ・dbi

gem install dbi --no-ri --no-rdoc ・dbd-odbc

gem install dbd-odbc --no-ri --no-rdoc ・activerecord-sqlserver-adapter

gem install activerecord-sqlserver-adapter -v 2.3.1 --no-ri --no-rdoc ・waz-storage

gem install waz-storage -v 1.0.0 --no-ri --no-rdoc ・mongrel

gem install mongrel --no-ri --no-rdoc ・thin

gem install thin --no-ri --no-rdoc ・ruby-sqlite3

gem install sqlite3-ruby --no-ri --no-rdoc

[*** LOCAL GEMS ***] actionmailer (2.3.5) actionpack (2.3.5)

(25)

activeresource (2.3.5) activesupport (2.3.5) cgi_multipart_eof_fix (2.5.0) daemons (1.1.0) dbd-odbc (0.2.5) dbi (0.4.5) deprecated (2.0.1) eventmachine (0.12.10 x86-mswin32-60) gem_plugin (0.2.3) mime-types (1.16) mongrel (1.1.5 x86-mswin32-60) rack (1.0.1) rails (2.3.5) rake (0.8.7) rest-client (1.6.1) ruby-hmac (0.4.0) sqlite3-ruby (1.3.1 x86-mswin32-60) thin (1.2.7 x86-mswin32) waz-storage (1.0.0)

著者紹介

シグマコンサルテゖング株式会社 橋本圭一 渡邊ひろゆき

参照

関連したドキュメント

(ページ 3)3 ページ目をご覧ください。これまでの委員会における河川環境への影響予測、評

LicenseManager, JobCenter MG/SV および JobCenter CL/Win のインストール方法を 説明します。次の手順に従って作業を行ってください。.. …

Bluetooth® Low Energy プロトコルスタック GUI ツールは、Microsoft Visual Studio 2012 でビルドされた C++アプリケーションです。GUI

Visual Studio 2008、または Visual Studio 2010 で開発した要素モデルを Visual Studio

手動のレバーを押して津波がどのようにして起きるかを観察 することができます。シミュレーターの前には、 「地図で見る日本

2030年カーボンハーフを目指すこととしております。本年5月、当審議会に環境基本計画の

当面の間 (メタネーション等の技術の実用化が期待される2030年頃まで) は、本制度において

続いて、環境影響評価項目について説明します。48