トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

Linux:SublimeText2でSublimeServerがうまく動かない

Last-modified: 2014-05-22 (木) 18:52:45 (1306d)
Top / Linux:SublimeText2でSublimeServerがうまく動かない

Linux:SublimeText2でSublimeServer?がうまく動かない

Linux(CentOS6.1)でSublimeText2でSublimeServer?をインストールしようとしたけどエラーがでて何度やっても失敗し、四苦八苦したためメモメモ

SublimeServer?とは?

SublimeServer?とは、Sublime内でWebServer?を起動し、Html等をこの組み込みWebサーバからアクセスして表示できる機能です。

これはかなり便利です!

まず、PackageControl?でインストールできない

まず、PackageControl?でインストール出来ませんでした。他のパッケージはインストール出来たのに。

なので、以下の手順でインストールしました

  1. 以下のURLからZIPをダウンロード
    http://learning.github.io/SublimeServer/
  2. ダウンロードしたZIPを展開して、Sublimeのメニューの「Preference」→「Browse Packages」で表示されるディレクトリにコピー
  3. Sublimeを再起動

インストールを以上で終了です。

が、SublimeServer?はちゃんと動きません。

※ちゃんとインストールされると、メニューの「Tools」→「SublimeServer?」の「Start SublimeServer?」が活性化するはずです。

※この時点で、メニューが活性化していたらインストール正常終了ですw

動かないところにパッチを当てる

まず、原因を調べるために、メニューの「View」→「Show Console」でコンソールを開きます。

すると、コンソール中に以下のメッセージが表示されていました。

Reloading plugin /home/xxxxxxxxxx/.config/sublime-text-2/Packages/SublimeServer/SublimeServer.py
Traceback (most recent call last):
  File "./sublime_plugin.py", line 62, in reload_plugin
  File "./SublimeServer.py", line 7, in <module>
    import os, sys, sublime, sublime_plugin, threading, webbrowser, posixpath, socket, cgi, shutil, mimetypes, time, io
  File ".\io.py", line 63, in <module>
ImportError: No module named _fileio

メッセージを読むに、

.\io.pyって中の63行目で_fileioってモジュールをインポートしようとしたけど_fileioってのはないよ ってことみたい。

SublimeはPythonで出来ているけど、OSにインストールされているpythonのコンソールで試しに「import io」って打ってみたけど特に問題無し。 つまり、なんかSublime特有の問題みたい。

ネットを調べたけど、何かいまいち的を得ない。 例えばこのissueとか

そこで、パッチを当てることにしました。

問題は、ioモジュールをインポートしているところにありそう。

プラグインのソースを見たところ、ioモジュールの使用箇所は1ヶ所で、214行目でした。

f = io.BytesIO()

これは、Pythonのインメモリの bytes バッファを利用したストリームの実装、らしいです。

ちなみに、これが利用されてる箇所は、SublimeServer?でディレクトリ内のファイルリストを表示する場合です。

これを使わずに、というと実体のファイルが必要になるなーとおもいつつ、まあ/tmpを使えばいいかということで、以下のようなパッチを当てました。

※まあ、基本的にはエディタから右クリックでブラウザに表示するし、ディレクトリのファイルリストを表示する場合に一時ファイルが・/tmpに生成されるくらいならいいっか、と言う割り切りでパッチを作成しています。

パッチは2ヶ所です。

  • 1ヶ所目 : 6行目付近 : import文からioを削除
    # modified 2014/05/18 start
    #import os, sys, sublime, sublime_plugin, threading, webbrowser, posixpath, socket, cgi, shutil, mimetypes, time, io
    import os, sys, sublime, sublime_plugin, threading, webbrowser, posixpath, socket, cgi, shutil, mimetypes, time
    # modified 2014/05/18 start
    ※元々の行はコメントアウトしてあります。
  • 2ヶ所目 : 218行目 : BytesIOを使用せず、/tmp/配下にファイルを作成するように変更
    # modified 2014/05/18 start
            #f = io.BytesIO()
            tmp = time.time()
            f = open("/tmp/st_sv_" + str(tmp) , 'w+')
    # modified 2014/05/18 end
    ※元々の行はコメントアウトしてあります。

このパッチを当てると、LinuxでもSublimeServer?が動くようになりました!やったー