WebMatrix 3: プッシュしてデプロイ!

執筆日時:

f:id:daruyanagi:20131029041314p:plain

Windows Azure Web Sites はソース管理(GitHub とか CodePlex とか)からのデプロイが可能。前々から使ってみたかったがついつい後回しにしていたのだけど、これが超便利だった。

Bitbucket

今回はソース管理に Bitbucket | The Git solution for professional teams を使った。

Bitbucket のいいところは、なんといっても無料でプライベートリポジトリが作れるところやな。Web アプリのソースコントロールでありがちなシチュエーションのなかに、シークレットキーを公開リポジトリにプッシュしちゃって消し方がわからんというのがあるけれど、プライベートリポジトリならそこらへんのことはあまり気にしなくてもいいのかもしれない(知らんけど)。

f:id:daruyanagi:20131029040633p:plain

あと、今回初めて知ったのだけど、ドメインの割り当て(CNAME)もできるのね。さっそくやってみたった。

機能的には GitHub のほうが先進的なのかもしれないけれど、Bitbucket もだいぶアリだなと思った。

f:id:daruyanagi:20131029040821p:plain

唯一の弱点は WebMatrix 3 によるサポートがないところ(まぁ、使おうと思えば使えると思うけれど)。公式の GUI ツール「SourceTree」も、「GitHub for Windows」に比べるとメンドくさい(その分多機能ではある)。

私の記憶が正しければ(←歳ばれ)、「SourceTree」の最新版は v1.3 ぐらいだったような気がする。

ちなみに、WebMatrix 3 は全部入りでスゴく便利だけど、決して万能ではない。だからソースコントロールにしろテキストエディターにしろ、自分に好みのツールがほかにあるならば、それと組み合わせてもいいんだよ? なにも縛られることはないんだ。実際、自分はコードの半分か 1/3 ぐらいは Visual Studio で書いている。

Windows Azure+ソースコントロール=デプロイ

f:id:daruyanagi:20131029041700p:plain

Windows Azure 側の設定はめっちゃ簡単。プロジェクトでデプロイの設定とやらをしてあるだけでいい。

f:id:daruyanagi:20131029041722p:plain

Azure から Bitbucket で認証すれば、Bitbucket にホストしているプロジェクトがリストアップされるので、そこで目当てのプロジェクトを選ぶだけでいい。ブランチも選べるんだな。今回はメンドくさいので master にしたけど、release みたいなブランチを切って置くほうがいいのかもしれない。

f:id:daruyanagi:20131029041854p:plain

設定が終わったら、しばし待たれよー……。

f:id:daruyanagi:20131029041915p:plain

完成!

f:id:daruyanagi:20131029042046p:plain

試しに 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() はなくても動いたのだけど、つけといたほうがいいんだろうか。まだまだシロートなので、こういうところはよくわかんない。