*Linux:SublimeText2でSublimeServerがうまく動かない [#r6f7f90f]
Linux(CentOS6.1)でSublimeText2でSublimeServerをインストールしようとしたけど四苦八苦したため、メモメモ
***SublimeServerとは? [#sd819d08]
SublimeServerとは、Sublime内でWebServerを起動し、Html等をこの組み込みWebサーバからアクセスして表示できる機能です。
これはかなり便利です!
-http://learning.github.io/SublimeServer/
***まず、PackageControlでインストールできない [#k8500b35]
まず、PackageControlでインストール出来ませんでした。他のパッケージはインストール出来たのに。
なので、以下の手順でインストールしました
+以下のURLからZIPをダウンロード&br;
http://learning.github.io/SublimeServer/
+ダウンロードしたZIPを展開して、Sublimeのメニューの「Preference」→「Browse Packages」で表示されるディレクトリにコピー
+Sublimeを再起動
インストールを以上で終了です。
が、SublimeServerはちゃんと動きません。
※ちゃんとインストールされると、メニューの「Tools」→「SublimeServer」の「Start SublimeServer」が活性化するはずです。
※この時点で、メニューが活性化していたらインストール正常終了ですw
***動かないところにパッチを当てる [#fbb6e9f9]
まず、原因を調べるために、メニューの「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とか
-https://github.com/bgreenlee/sublime-github/issues/55
そこで、パッチを当てることにしました。
問題は、ioモジュールをインポートしているところにありそう。
プラグインのソースを見たところ、ioモジュールの使用箇所は1ヶ所で、214行目でした。
f = io.BytesIO()
これは、Pythonのインメモリの bytes バッファを利用したストリームの実装、らしいです。
-http://docs.python.jp/2/library/io.html#id3
ちなみに、これが利用されてる箇所は、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が動くようになりました!やったー