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

Linux:SublimeText2でSublimeServerがうまく動かない の変更点

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

*Linux:SublimeText2でSublimeServerがうまく動かない [#r6f7f90f]

Linux(CentOS6.1)でSublimeText2でSublimeServerをインストールしようとしたけど四苦八苦したため、メモメモ
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が動くようになりました!やったー