WordpressからOctopressに移行

もともとさくらのレンサバ上でWordpressで構築していたブログをOctopressに移行してGithub Pagesでホスティングするように切り替え。 最初はJekyllだけでやろうとしてたけど、ブロクとしての機能を見るとOctopressのほうが良さそうだったので途中で方針転換。

手順

詳細な手順は面倒なので割愛するとして、だいたいこんな感じの流れで移行。

  1. 作業用環境にjekyll, jekyll-import, mysql2, sequelをgem install
  2. さくらのレンサバ上のMySQLのデータをmysqldumpしてscp
  3. dumpデータを作業用環境のMySQLにリストア
  4. リストアしたデータからjekyll-importを使って記事のmarkdownファイルを吐き出す
  5. octopressをcloneして、rake install
  6. jekyll-importで吐き出されたファイルをoctopressのsource/_posts以下に移動
  7. rake previewで表示を確認しながら、source/_posts以下のmarkdownファイルをひたすら修正
  8. テーマを調整&元記事のURLパスと同一になるように_config.ymlに設定
  9. githubにpushしてgithub pagesとして公開
  10. CNAMEを設定してgithub.ioから元のドメイン(blog.restartr.com)に移行

さくらのレンサバ内からしかWordpressのDBに接続できないのと、レンサバ内でrubyを使うのはなんか面倒事が多そうだったので、環境整備済みなvpsで移行作業。

※wordpressのエクスポート機能で吐き出したxmlからmigrateする方法もあるけど今回は不採用

Wordpressの時のドメイン、パスを同一にするための設定

wordpressでは/year/month/day/titleというpermalinkを設定していたのでそれと同一にするための作業。

  • ドメインはgithub pagesのカスタムドメインとCNAME設定で解決
  • パスは_config.ymlのpermalinkを/:year/:month/:day/:titleにして解決

さくらのレンサバ側の独自ドメイン設定

これでハマりました。さくらのドメインの設定で”blog.restartr.com”のCNAMEを設定したのに、DNSへの問い合わせ結果が常にAレコードしか帰ってこなくてかなり悩んでた。 結論は、さくらのレンサバの設定画面で独自ドメインとして”blog.restartr.com”を登録していて、そっちの設定が邪魔をしていた。

さくらのレンサバの独自ドメイン設定をはずして、さくらのドメインのCNAME設定を追加したら無事に解決。

さくらのレンサバの独自ドメインの解除から、2時間以上反映に時間かかるらしい

postデータの修正

jekyll-importを使ってmarkdownを吐き出すところまではすんなりいけたけど、なにより面倒だったのが吐き出したmarkdownを修正する作業。

  • シンタックスハイライトするために[ccW_python]...[/ccW_python]とか<pre class="brush:pyton">...</pre>とか独自タグがある
  • amazonのリンク生成用タグ[tmkm-amazon]123456[/tmkm-amazon]というタグがある
  • <p>タグと<br />タグの嵐

これらの対応のためにいちいち置換するのが非常に大変。[ccW][tmkm-amazon]タグは置換できたけど、<pre class="brush:...">についてはハイライトされないだけで表示上問題なさそうなので無視。 あとはmarkdownにhtmlが混じってるのが気持ち悪いので<p><br />を置換して行間を調整。

ドラフト記事をリモートにpushしてなくて別のPCから記事の途中からかけなくて困った…とならないように基本的にVPS上にcloneすることにした。 これで記事編集のための苦痛を感じる事無く純粋なmarkdownで記事がかけるようになる。

GoとPythonをZeroMQで繋ぐ

最近Rubyでプロジェクトオイラーを解きながらRubyに慣れようとしてるのですが、ちょっと飽きてきたので息抜きにGoを書いたりしています。

ついでにZeroMQも試してみたかったので、GoとPythonをZeroMQで繋いでみました。

構成はこんな感じで、Python(かGo)clientを起動し、Goで動くmonitorq経由でGoのserverにつながります。PUB/SUBでmonitorからモニタリングできるのがミソです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
              +----------------------------------------+
              |                                        |
  +------+        |--------------------------+     +-----+ |
  |client|--------|9001     monitorq     9002|-----|serv | |
  |(REQ) |        |(ROUTER)   9003   (DEALER)|     |(REP)| |
  +------+        |--------------------------+     +-----+ |
              |          |(PUB)                        |
              |          |                             |
              |          |                             |
              |          |(SUB)                        |
              |      +-------+                         |
              |      |monitor|                         |
              |      +-------+                         |
              +----------------------------------------+

※client/server/monitorは複数たちあげるとよしなに振り分けてくれます。

  • monitorqでfan-in/outする
1
$ go run queue.go monitorq
  • clientから”PING”を投げる(と、”PONG#“が帰る)
1
2
3
4
$ python run queue.py client
PONG#<28870>
PONG#<28870>
 :
  • serverから”PONG”を返す(clientからのPINGを表示)
1
2
3
4
$ go run queue.go serv
Recv: PING#<73835>
Recv: PING#<73835>
 :
  • monitorでリクエスト総数をモニタリング
1
2
3
4
$ go run queue.go monitor
MONITOR: IN: 2082, OUT 2082
MONITOR: IN: 2083, OUT 2083
 :

コードはgistにあげてます。

ZeroMQなら他にもいろんな構成がとれるので、使いどころは結構あるのではないかと。

今回、不慣れなGoで書いてみましたが、これくらいであればもわりと素直にかけるなぁという印象です。

Goで書かれたZeroMQのサンプルは以下githubリポジトリにたくさんあるので、覗いてみると色々勉強になります。