Passengerのアップデート

アホだった。

$ sudo gem update

Passengerがアップデートされたので、Apacheの設定ファイルを書き換えてリスタート。サイトにアクセスすると、publicディレクトリが丸見え。

モジュールコンパイルするの忘れました。

$ sudo passenger-install-apache2-module

gemで入るから、なんかアップデートされた気になっていた。orz

Snow LeopardでPostgreSQLのRubyドライバをインストールする

当方、MacBook Proです。PostgreSQLMacPorts経由で入れるのが簡単。

$ sudo port install postgresql83 postgresql83-server

その後、gemでインストール。

$ sudo env ARCHFLAGS="-arch x86_64" gem install postgres -- --with-pgsql-lib=/opt/local/lib/postgresql83/ --with-pgsql-include=/opt/local/include/postgresql83/

終了。x86_64ってのがミソでしょうか。*1

RightAws::ActiveSdbのバグ回避のメモ(right_aws-1.10.0 gem)

Amazon SimpleDBに取り組もうと思い、いろいろ調査しています。Javaからはtypicaを使うと良いようですが、結構ローレベルなAPIになってます。(別にこれで用は足りるのですが・・)
Rubyからもアクセスしたいので調査したのですが、現在のシステムでAmazon S3にアクセスする時に利用しているRightAwsが良さげという事で試してみました。

まずはgemのインストール。

gem install right_aws

uuidtoolsも必要との事で、これも入れる。

gem install uuidtools

RDocにあるサンプルソース*1をそのまま実行してみると、エラーになりました。

/Library/Ruby/Gems/1.8/gems/right_aws-1.10.0/lib/sdb/active_sdb.rb:367:in `generate_id': undefined method `timestamp_create' for UUID:Class (NoMethodError)

依存しているuuidtoolsのUUIDクラスにtimestamp_createメソッドはない!と怒られてしまいました。
どうも、バージョン1.10.0のバグのようです。こちらに報告が上がっていました。

To fix this problem, you'll need to edit line 376 of active_sdb.rb and add the module (UUIDTools).

  • UUID.timestamp_create().to_s
  1. UUIDTools::UUID.timestamp_create().to_s

との事なので、先ほどのサンプルソースに一部手を加えると動くようになりました。

class Client < RightAws::ActiveSdb::Base
  def self.generate_id # :nodoc:
    UUIDTools::UUID.timestamp_create().to_s
  end
end

ちなみにこのRightAws::ActiveSdbは、ActiveRecordっぽいAPIになってます。激しく便利!ActiveRecordのidはシリアルですけど、ActiveSdbのidはUUIDになります。

Amazonから警告が来た!

本日夕方、Amazonから「Notice: Degraded Amazon EC2 Instance」というタイトルのメールが来ました。

We have noticed that one or more of your instances are running on a host degraded due to hardware failure.

i-XXXXXXXX

The risk of your instances failing is increased at this point. We cannot determine the health of any applications running on the instances. We recommend that you launch replacement instances and start migrating to them.

ハードウェアの障害を検知したので、別のインスタンスを立ち上げた方が良いよ!とのお達し。
初めての経験だったのでちょっとびっくりしました*1が、問題のインスタンスにログインして様子を見るものの、一見問題なさそうに動いていました。
ですが、このまま放置する訳にも行かないので、言われるがまま別インスタンスを立てました。

サービス自体に影響は無かったので一安心。

  • 教訓その1
    • AMIは必ず作る。これさえあれば、すぐに回復出来る。
  • 教訓その2
    • データの保管はS3もしくはEBSに。そうしておけば、データを焦ってコピーする必要はない。
  • 教訓その3
    • データのバックアップは必ずとる。あたりまえっちゃー、あたりまえですが。

*1:また落雷か!と思わずにはいられなかった。http://www.itmedia.co.jp/enterprise/articles/0906/12/news027.html

swftools-0.9.0のコンパイル

Ubuntu8.10にはswftoolsのパッケージが用意されていますが、残念ながらバージョンがちと古いです。(0.8.1)
やりたいのは、PDFをSWFに変換する事。で、いろいろ試してみたけど、このバージョンで問題なのが、「縦書き」のサポート。そもそもPDFの縦書きエンコーディングは解釈しないみたい。

私は「日本の」印刷屋なので、縦書きが表現出来ない事には仕事になりません。

で、サポートしているという噂(?)の「0.9.0」をコンパイル/インストールしてみました。

まずは、ソースのダウンロード

$ wget http://www.swftools.org/swftools-0.9.0.tar.gz
$ tar xzfv swftools-0.9.0.tar.gz 
$ cd swftools-0.9.0/

次に、configureしてみるものの、いきなりzlibがないとか言われたので、ここはよく調べてからと思い直し、必要なパッケージをインストールしました。Ubuntuのパッケージ情報のページこちらのサイトなんかを参考にしています。

$ sudo apt-get install libfreetype6-dev libgif-dev libjpeg62-dev libt1-5 zlib1g-dev libavifile-0.7-dev libart-2.0-dev

フォントエンジン、JPEGやGIF、AVIのライブラリなどですね。

お決まりの呪文を唱えます。

$ ./configure
$ make
$ sudo make install

コンパイルエラーなどが出ていなさそうなので、動作確認。

$ pdf2swf --version
pdf2swf - part of swftools 0.9.0

ちなみにここにインストールされます。

$ which pdf2swf
/usr/local/bin/pdf2swf

縦書きのPDFをSWFにしてみた所、問題なく変換出来ました。すげー。ちなみにswftoolsscribd.comも内部的に使っているみたい*1ですね。

ここのところパッケージからインストールで用が足りているので、自力でコンパイルきついな、と思ってましたけど、ライブラリをパッケージから容易にインストール出来たので拍子抜けする程簡単でした・・。

EC2で他人のJBossの管理画面が・・

最近流行(これからは常識?)のクラウドAmazon EC2をテストしています。

で、ちょっと「ぎょっ」とした事があったのでメモ。

Webアプリなんですが、よくあるパターンでApacheのmod_proxy_balancerにてバックエンドのTomcatに転送する設定にしていました。

こんなかんじ。(適当です)

<Proxy balancer://tomcat6>
  BalancerMember http://hoge.compute-1.internal:8080 loadfactor=10
</Proxy>



で、一度インスタンスをシャットダウンして、翌日起動したのですが、何の気無しにブラウザでアクセスした所、入れた覚えの無いJBossの管理画面が!!。

URL間違えたか?と思ったけど、間違いなく自分のインスタンスで、Apacheを落とすと間違いなくアクセス出来ない・・。EC2は起動する度に毎回アドレスが変わるから、転送の設定変えないとエラーになるはずです。

一瞬何が起こったのか解りませんでした。誰かが侵入してJBossを入れた!?何の為に?なんでJBoss?(笑)

まぁ、よく考えたら、mod_proxy_balancerの設定を新しいアドレスに変更していなかったのが理由で、たまたま昨日使っていたアドレスが他人に割り振られた・・という事になります。





アドレスが変わるって事は、こういう事もありえるというのは頭で解っていましたが、偶然にもこういう形で見せられると結構ビビります。