Morph AppSpace - Rails開発者クックブック

訳者前書

Rubyホスティングサービスを行うMorph AppSpaceのドキュメント「Rails開発者クックブック」(原題Rails Developers’ Cookbook)を翻訳しました。


MorphはPaaS(Platform as a Software)プロバイダです。
Cubeという単位でサービスを受けることができ、1Cubeであれば無料で使用することができます。

海外サービスなのでドキュメントが英語で記述されています。
そこで訳してみたのですが、よくよく考えるとこの海外のサービスを使うのは
マニュアル程度の英語が読めないといかんよな、と終わってから気づきました。


お役に立てば幸いです。
あと、お約束ですが無保証ですのでよろしくです。



このクックブックについて

Rails開発者向けクックブック」はMorph AppSpaceについての技術情報とアプリケーションをMorph AppSpaceに配備する為の様々な技術的な手順を提供します。

開発者その他の人はこのドキュメントを読むことを推奨します。このクックブックは開発者に、Morph AppSpaceに対するシームレスな開発を手にする為のご案内をします。開発者は、開発の過程における様々なヒントや技を理解したり、プリインストールされたGemの一覧を見たりすることができます。

導入

SaaSはソフトウェアの提供方法であり、アプリケーションは、インターネットを介し、共用のインフラにより利用可能になります。SaaSアプリケーションは購入されるよりもむしろレンタルされます。それは、昔ながらのライセンスモデルを提案する高価なソフトウェアソリューションに対して、経済的な面での代替案となります。


Morphは、SaaSの運用を簡単にする、柔軟な配備・配信・管理ソリューションを構築しました。それが、Morph AppSpaceです。Morph AppSpaceは、ウェブアプリケーションに対して配備・配信・管理システム一式を提供します。それはMorph Application Platform内で動作しており、要求が変化した場合にでもスケール可能なフォールトトレラント環境を備えてます。


The Morph AppSpaceはロードバランシング、高可用性(High-Available)インフラストラクチャ、Morph AppSpace Cube1、統合されたデータベース、管理されたバックアップ、モニタリング、自己修復メカニズムすべて揃えています。これにより、サーバをインストールしたり設定したりする負担から解放されます。アプリケーションを開発することとそれをMorph AppSpaceにデプロイすることだけに集中すればよいのです。我々の経験豊かなチームが、その他の面倒を見ます。Morph AppSpaceの料金は、エントリレベルのウェブアプリケーションに対して1日あたり1USドルから利用可能です。詳細については、www.mor.phを参照下さい。

テクノロ

配備

自分のアプリケーションを Morph AppSpaceにデプロイするとき、コードは安全にAmazon S3に転送されます。
我々のシステムは、新しいアップロードを取ってきて、自動的に Morph AppSpaceの契約者のアプリケーションサーバにデプロイします。マイグレーションが適用されていない場合でも、我々がデータベースが自動的に更新されるよう、マイグレーションを実行します。数分の内に、アプリケーションは更新され動作します。我々は、デプロイされたアプリケーションについて、以前のバージョンに戻さなければならない場合に備えて、複数のバージョンの保持さえも行います。

提供

Morph Application Platformのフォールトトレラント環境は、エンドツーエンドのエンタープライズ品質ソリューションを提供します。インテリジェントなロードバランサが入力トラフィックを、アプリケーションサーバに対して最小の負荷で適切に経路設定を行います。ファイアウォールが環境を保護します。Web delivery stacksとアプリケーションサーバは、アプリケーションの性能を最適化するよう特にチューニングされています。我々のシステム管理者はインフラストラクチャのコンポーネントそれぞれに対して、定期的に監視、更新、パッチ当て、管理をしています。また、我々は特別なライブラリを開発しました。これによりAmazon S3から直接、高速キャッシュシステムが活用できます。我々の多才なAPIによって、アプリケーションが複数の区画とデータの分離をサポートできます。

管理

Morph Application Platformは、アプリケーションの管理を効率化します。我々の自動化された監視システムは、サーバ、サービス、アプリケーションを見張り続け、どんな潜在的な問題でさえも知らせます。CPU・メモリ使用率を含めアプリケーションのリアルタイムな状態を見ることができます。ボタンをクリックするだけで、利用者のニーズに合わせて、アプリケーションのリソースを増やすことができます。直接、自分のデータベースを管理することやアプリケーションのログを見ること、rakeタスクを実行することができます。アプリケーションに関してすべての権限を持っています。

Morph AppSpaceへアプリケーションを配備する

どんなRailsアプリケーションでもMorph AppSpaceに配備するのは簡単です。以下の手順に従ってください。

Railsアプリケーションを用意する

Railsアプリケーションを用意する為に、また配備中の障害が起こる可能性を減らす為に、以下の項目を参照して下さい。

  • productionモードのアプリケーションのすべてのGemを固定することを推奨します。これは、互換性があるかどうかわからないサーバー上のGemをあてにするより、既にテストされて動作することがわかっているGemをアプリケーションが使用するようにする為です。
【注意】venderディレクトリのgemを固定する方法については、これらのサイトで手順を確認してください。 もしも、なんらかのgemを固定できない場合、あなたのgemをインストールするようsupport@mor.ph宛てにリクエストを送ってください。 そうすれば、我々のチームはそれをサーバに追加できるかどうかチェックします。プレインストールされたgemの一覧については、後述の「プリインストールGem一覧」を参照して下さい。
既存のデータからデータベースを複製したい場合は、データをアプリケーションが使用するデータベースにインポートするのにコントロールパネル内のDB Adminを使っても良いでしょう。さらに手助けが必要な場合は、どうぞ遠慮せずにサポートチケットを申し込んでください。
  • アプリケーションはPostgreSQLMySQLに準拠していなければなりません*1
  • セッションにデータベースを使用するように、アプリケーションを設定してください。(Railsアプリケーションのルートディレクトリで)rake db:sessions:createと入力することでその為のマイグレーションを生成することができます。その後、ActiveRecordのセッションを使用するようenvironment.rbを設定し、rake db:migrateを実行してください。
注:その代わりに、 Rails 2.x のcookieを用いたセッションを使うこともできます。
注:tarコマンドがパス上にあるかどうか確認してください。 C:\Program Files\GnuWin32\bin フォルダの、bsdtar.exeをコピーし、 tar.exeにリネームして下さい。
  • アプリケーションの使用者によってアップロードされるいかなるファイルについても、中央のストレージに保存されるべきであり、(attachment_fuプラグインを使用してS3に保存する、というように)アプリケーション内にコードを記述してファイルシステム上に保存する、というようにすべきではありません。これは、アプリケーションが分散システムにより動作させられているからで、あるサーバ上に保存されたファイルは別のサーバからはアクセスできないからです。
注:Subversion以外のバージョン管理システムを使うこともできます。 CVS、GIT、Mercurial, Accurev, Bazaar, Perforce, Darcsが使用可能です。 もし、ローカルファイルのRailsプロジェクトを配備する場合は、 http://forums.mor.ph/forums/8/topics/25. にて詳細な手順を確認して下さい。
  • アプリケーションでEメールを送信する必要がある場合、専用のEメールサービスプロバイダを使用することを推奨します。
  • ActionMailerをセットアップするには、以下の設定に従ってください(config/environment.rb内)。その他の設定オプションについては、http://api.rubyonrails.org/を参照して下さい。
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
:address => "your.smtp.server",
:port => 25,
:domain => "www.mywebsite.com",
:user_name => 'your_user_if_login_is_needed',
:password => 'your_password_if_login_required',
:authentication => :login # Can also use: :plain or :cram_md5
}
Railsアプリケーションを配備する
以下の簡単な手順で、配備を行いMorph AppSpace上でアプリケーションを動作させることができます。
  • Morphコントロールパネルにログインします。
  • コントロールパネルのSubcriptionsページから、New Subscriptionをクリックして新たに購入を行います。このように表示されます。
  • 必須のフィールドを埋めます。
  • 購入(Create subscription)をクリックして、新たにMorph AppSpace を購入します。
  • 新たに追加購入するウィジェットを選択してください。アプリケーションにデータベースが必要な場合は、データベース作成(Create Database)をクリックします。
注:Capistranoファイルをバージョン管理システムにコミットすることをお勧めします。
【設定例】
set :repository, 'http://dev.myapp.com/repos/ruby/trunk/testing/makepoem'
  • コンソール画面にて、アプリケーションのルートディレクトリに移動し、cap -f morph_deploy.rb morph:deploy と入力してください。Capistranoファイルを別のファイル名で保存したり、別のディレクトリに保存した場合は、適宜morph_deploy.rbの箇所を読み替えてください。
  • コンソール画面にて、Morphへのログイン認証を入力するよう求められます。ユーザ名とパスワードを入力してください。
  • コマンドが終了したら、数分お待ち下さい(アプリケーションが初期化される間)。その後、ブラウザにて、<あなたのアプリケーション>.morphexchange.comへアクセスしてください。
Morphのユーザ名とパスワードをコマンドラインで入力する。
オプションとして、Morphのユーザ名とパスワードをスクリプトに入力したり、 コマンドに渡すことができます。 その変数はmorph_user とmorph_passになります。 次のようにして、これらの変数をスクリプト内に設定するかコマンドに渡します。
-s morph_user=username -s morph_pass=password
Subversion以外のバージョン管理システムを使用する
Subversion以外のバージョン管理システムを使用する場合、以下の手順を行ってください。
  • subscriptionウィジェットの管理(Manage)をクリックしてください。ダッシュボード(Dashboard)が表示されます。
  • Morph AppSpace配備用のRubyツール類(Ruby Tools for Morph AppSpace Deployment)をクリックし、CAPファイルウィザード(CAP File Wizard)をクリックしてください。
  • ご使用中のバージョン管理ツールをドロップダウンメニューより選択してください。以下のうちのいずれかを選択できます。
  • リポジトリURLをテキストフィールド(Repository URL)に入力してください。これにより自動的にリポジトリURLがCapistranoファイルに保存されます。
  • 生成(Generate)ボタンをクリックしてください。これにより、Capistranoファイルがダウンロードされます。
  • コンソール画面から、cap -f morph_deploy.rb morph:deployと入力し、アプリケーションを配備してください。
  • それ以外の場合は、キャンセル(Cancel)をクリックしてください。
Windowsにて圧縮に7zipを使用する
Windowsにて、アプリケーションを配備するのに7zipを使用するには以下の手順を行います。
  • ご自身のマシンに7zipをインストールします。http://www.7-zip.orgからダウンロードできます。
  • 次の手順により、7zipをパスに追加します。
    • マイコンピュータ→プロパティ→詳細設定に進みます。
    • 環境変数をクリックします。
    • システム変数Pathを選択肢、編集をクリックします。
    • C:\Program Files\7-zipを追記します
    • 次の手順により、morph_deploy.rbファイルを編集します。
以下のコマンドを削除し…
remove_files([morph_tmp_dir, 'code_update.tar.gz'])
…このように変更する
remove_files
([morph_tmp_dir,'code_update.tar.gz','code_update.tar'])
以下のコマンドを削除し…
system("tar -C #{morph_tmp_dir} -czf code_update.tar.gz --exclude='./.*' .")
…このように変更する
comp_dir="#{morph_tmp_dir}\\app\\..\\*"
system("7z a -ttar -r code_update.tar #{comp_dir}")
system("7z a -tgzip code_update.tar.gz code_update.tar")
以下のコマンドを削除し…
flist = `tar tzf code_update.tar.gz`
all_in = flist.include?('lib/') && flist.include?('app/') &&
flist.include?('config/environment.rb')
…このように変更する
flist = `7z l code_update.tar`
all_in = flist.include?('lib\\') && flist.include?('app\\') &&
flist.include?('config\\environment.rb')
アプリケーション配備時の圧縮に7zipを使用する方法をMorphに提供してくれたルーカス・フランクリンに感謝します。

2008/08/22時点でのプリインストールGem一覧

Gems Version
actionmailer 2.1.0, 2.0.2, 2.0.1, 2.0.0, 1.3.6, 1.3.5, 1.3.4, 1.3.3, 1.3.2, 1.3.1, 1.3.0, 1.2.5
actionpack 2.1.0, 2.0.2, 2.0.1, 2.0.0, 1.13.6, 1.13.5, 1.13.4, 1.13.3, 1.13.2, 1.13.1, 1.13.0,1.12.5
actionwebservice 1.2.6, 1.2.5, 1.2.4, 1.2.3, 1.2.2, 1.2.1,1.2.0, 1.1.6
activemerchant 1.3.2
activerecord 2.1.0, 2.0.2, 2.0.1, 2.0.0, 1.15.6, 1.15.5, 1.15.4, 1.15.3,1.15.2, 1.15.1, 1.15.0,1.14.4
activeresource 2.1.0, 2.0.2, 2.0.1
activesupport 2.1.0, 2.0.2, 2.0.1, 2.0.0, 1.4.4, 1.4.3, 1.4.2, 1.4.1, 1.4.0, 1.3.1
addressable 1.0.4
archive-tar-minitar 0.5.2
aws-s3 0.4.0
bcrypt-ruby 2.0.3
builder 2.1.2
capistrano 2.2.0, 2.1.0
cgi_multipart_eof_fix 2.5.0, 2.3, 2.1
color 1.4.0
daemons 1.0.10, 1.0.9, 1.0.7, 1.0.5
data_objects 0.9.2, 0.2.0
dm-core 0.9.2
do_mysql 0.2.4
Gems Version
do_postgres 0.9.2
echoe 3
english 0.2.0
extlib 0.9.2
ezcrypto 0.7
facebooker 0.9.5
facets 2.4.1
fastercsv 1.2.3
fastthread 1.0.1, 1.0
feedtools 0.2..29
fiveruns_tuneup 0.8.13, 0.8.12, 0.8.11
gem_plugin 0.2.3, 0.2.2
google4r 0.0.1
haml 2.0.1, 1.8.2
highline 1.4.0
hoe 1.7.0, 1.5.1
hpricot 0.6
hpricot-scrub 0.2.0
image_science 1.1.3
json 1.1.2
mime-types 1.15
mocha 0.5.6
money 1.7.1
mongrel 1.1.4, 1.1.3, 1.0.2
Gems Version
mongrel_cluster 1.0.5, 1.0.2
multi 0.1
mysql 2.7
mysql_retry_lost_connection 0.0.1
needle 1.3.0
net-sftp 1.1.1, 1.1.0
net-ssh 1.1.2
oniguruma 1.1.0
ParseTree 2.1.1
pdf-writer 1.1.8
postgres 0.7.9.2008.01.28, 0.7.9.2008.01.24
rails 2.1.0, 2.0.2, 2.0.1, 1.2.6, 1.2.5, 1.2.4, 1.2.3, 1.2.2, 1.2.1, 1.2.0, 1.1.6
rake 0.8.1, 0.7.3
random_data 1.3.1
rapt 0.2.2
RedCloth 3.0.4
redgreen 1.2.2
rfacebook 0.9.8
rmagick 2.2.2, 2.1.0
roxml 1.2
rspec 1.1.4
ruby-openid 2.0.4, 2.0.3, 1.1.4
ruby-yadis 0.3.4
ruby2ruby 1.1.8
Gems Version
rubyforge 1.0.0, 0.4.5
rubygems-update 1.0.1
RubyInline 3.6.7, 3.6.6
ruport 1.6.0
sources 0.0.1
transaction-simple 1.4.0
twitter 0.2.7
tzinfo 0.3.8, 0.3.6, 0.3.4, 0.3.3
uuidtools 1.0.3
xml-simple 1.0.11
xmpp4r 0.3.2
youtube 0.8.6
更新されたプリインストールGem一覧については、 http://forums.mor.ph/forums/8/topics/46をご覧下さい。 Morph Labsは、アプリケーション環境を仮想化する「サービスとしてのプラットフォーム」(Paas)の先進的なプロバイダであり、 オープンソース技術を使用し、Webアプリケーションの配備・配送・管理を容易にします。 Morph Labsは、瞬時に供給可能でありシームレスにスケール可能な、 真に柔軟な環境をWebアプリケーションに提供するために、 Amazon Web Servicesを含めた仮想化インフラストラクチャを利用しています。 Morph Labsはフィリピンのセブ市に本部を持つグローバル企業で、 アメリカ内のロサンジェルス、カリフォルニア、オレゴン州ポートランドに加え、 マニラで国内運用を行っています。 世界本部
  • Unit 1A, Asiatown IT Park,Lahug, Cebu City 6000 Philippines
お問い合わせ
Copyright 2008, Morphlabs, Inc. All rights reserved. This document is provided for information purposes only and the contents herein are subject to change without notice. This document is not warranted to be error-free, nor subject to any other warranties or conditions, whether expressed orally or implied in law, including implied warranties and conditions of merchantability or fitness for a particular purpose. We disclaim any liability with respect to this document and no contractual obligations are formed either directly or indirectly by this document. Morph, Morph Application Platform, Morph AppSpace, and Simplify Innovation are registered trademarks of Morphlabs, Inc. Other names may be trademarks of their respective owners.

*1:訳注:いずれか一方に対応していれば問題ないはずです