Skip to content

silkでqmlファイルがベタで落ちてくる

   

このブログはsilkを使用していますが、特定の環境で動かしていると、ブラウザからqmlファイルにアクセスしたときに、qml -> htmlの変換がされずにqmlファイルがベタで落ちてくることがあります。 これはsilkを動かしているサーバーのMIME情報にqmlが登録されていないために発生します。直す方法をメモしておきます。

ちなみに、そんなに調べていませんが、shared-mime-infoにqmlが追加されたのは2011年です。最近のバージョンのディストリビューションであればほぼ問題ないと思います。確認した限りではRHEL/RHELのソースをベースにしたもの(CentOSなど)くらいでしょうか。某所でOpenShiftでも同じ現象が発生するのはおそらく同じ理由かと…

silkはQMimeDatabaseクラスを使用してアクセスされたファイルのMIME情報をマッチングして、マッチしたものに対して適切なContent-Typeでリクエストに返答するようになっていますが、QMimeDatabase::mimeTypeForFile()関数ではマッチしなかったファイルに対してすべて”application/octet-stream”のMIME情報を返すため、qmlファイルが直接ダウンロードされてしまいます。

ちなみに、silkではmimeTypeForFile()に渡すMatchModeをQMimeDatabase::MatchExtensionにしているため、ファイルの拡張子でのみ判断していることになります。MatchModeにはファイルの中身を判別するオプションもありますが、Linuxのshared-mime-infoに登録されているqmlファイルの内容での判断は正直やっつけ感があるので、使わない方が賢明かと思います。

というわけで、MIME情報をOSに追加すれば、きちんとマッチしてくれて、qmlファイルに関してはsilkのMimeHandlerプラグインによってqml -> htmlの変換が実行されるようになります。Linuxの場合は、/usr/share/mime/packages/freedesktop.org.xml に追記すればOKです。内容としては、shared-mime-infoのgitを見るとよいでしょう。

silk起動時にmimeキャッシュを見にいくので、念のため

update-mime-database /usr/share/mime

と打っておくのがよいでしょう。

  1. SailfishOS SDKをGentoo Linux x64にインストールする
  2. Nokia N9のCalDAVでGoogle Calendarの複数カレンダーを同期する
  3. Bluetoothテザリング対応端末にNokia N9をBT-PAN接続する
  4. N9/N950で黒いMMSするアレ
  5. Maliitのebuildを書いてGentooにインストールしてみた
  6. N950(Harmattan)の日本語フォントを置き換える
  7. ブログをBloggerへ移行しました。