WebMatrix 3: プッシュしてデプロイ!
執筆日時:
Windows Azure Web Sites はソース管理(GitHub とか CodePlex とか)からのデプロイが可能。前々から使ってみたかったがついつい後回しにしていたのだけど、これが超便利だった。
Bitbucket
今回はソース管理に Bitbucket | The Git solution for professional teams を使った。
Bitbucket のいいところは、なんといっても無料でプライベートリポジトリが作れるところやな。Web アプリのソースコントロールでありがちなシチュエーションのなかに、シークレットキーを公開リポジトリにプッシュしちゃって消し方がわからんというのがあるけれど、プライベートリポジトリならそこらへんのことはあまり気にしなくてもいいのかもしれない(知らんけど)。
あと、今回初めて知ったのだけど、ドメインの割り当て(CNAME)もできるのね。さっそくやってみたった。
機能的には GitHub のほうが先進的なのかもしれないけれど、Bitbucket もだいぶアリだなと思った。
唯一の弱点は WebMatrix 3 によるサポートがないところ(まぁ、使おうと思えば使えると思うけれど)。公式の GUI ツール「SourceTree」も、「GitHub for Windows」に比べるとメンドくさい(その分多機能ではある)。
- Atlassian、無償のGit/Mercurialクライアント「SourceTree for Windows」v1.2を公開 - 窓の杜
- 「SourceTree for Windows」がv1.0に、“Mercurial”を新たにサポート - 窓の杜
私の記憶が正しければ(←歳ばれ)、「SourceTree」の最新版は v1.3 ぐらいだったような気がする。
ちなみに、WebMatrix 3 は全部入りでスゴく便利だけど、決して万能ではない。だからソースコントロールにしろテキストエディターにしろ、自分に好みのツールがほかにあるならば、それと組み合わせてもいいんだよ? なにも縛られることはないんだ。実際、自分はコードの半分か 1/3 ぐらいは Visual Studio で書いている。
Windows Azure+ソースコントロール=デプロイ
Windows Azure 側の設定はめっちゃ簡単。プロジェクトでデプロイの設定とやらをしてあるだけでいい。
Azure から Bitbucket で認証すれば、Bitbucket にホストしているプロジェクトがリストアップされるので、そこで目当てのプロジェクトを選ぶだけでいい。ブランチも選べるんだな。今回はメンドくさいので master にしたけど、release みたいなブランチを切って置くほうがいいのかもしれない。
設定が終わったら、しばし待たれよー……。
完成!
試しに darufeed.azurewebsites.net へフィード出力機能をちゃちゃっとつけて(http://darufeed.azurewebsites.net/Feed)、Bitbucket にプッシュしてみたら、Azure にも勝手にデプロイされた。
おまけ
WebMatrix 3: RSS フィードを出力する - だるろぐ の内容には問題があるな。Writer を Close していないから、空のフィードが出力された。
@using System.IO @using System.Xml @using System.ServiceModel.Syndication@{ using (var db = Database.Open("darufeed")) { var items = db.Query("SELECT * FROM Feeds ORDER BY FeedId DESC").Take(10);
var feed = new SyndicationFeed(App.Title, App.Description, Request.Url) { Copyright = new TextSyndicationContent(App.Copyright.ToString()), Items = items.Select( item => new SyndicationItem(item.Title, "", new Uri(item.Url)) ), };
Response.Clear(); Response.ContentType = "application/xml";
using (var writer = XmlWriter.Create(Response.Output)) { feed.SaveAsRss20(writer); } } }
Writer を Using しておけば問題ない。Response.Close() や Response.Flush() はなくても動いたのだけど、つけといたほうがいいんだろうか。まだまだシロートなので、こういうところはよくわかんない。