Linux:SublimeText2でSublimeServerがうまく動かない
Linux:SublimeText2でSublimeServer?がうまく動かない †
Linux(CentOS6.1)でSublimeText2でSublimeServer?をインストールしようとしたけどエラーがでて何度やっても失敗し、四苦八苦したためメモメモ
SublimeServer?とは? †
SublimeServer?とは、Sublime内でWebServer?を起動し、Html等をこの組み込みWebサーバからアクセスして表示できる機能です。
これはかなり便利です!
まず、PackageControl?でインストールできない †
まず、PackageControl?でインストール出来ませんでした。他のパッケージはインストール出来たのに。
なので、以下の手順でインストールしました
- 以下のURLからZIPをダウンロード
http://learning.github.io/SublimeServer/ - ダウンロードしたZIPを展開して、Sublimeのメニューの「Preference」→「Browse Packages」で表示されるディレクトリにコピー
- 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?が動くようになりました!やったー