蛇にお茶入れる

Pythonやその他プログラミングで学んだ知識のメモ用です

サーバとローカルのフォルダを同期してみた

たまにサーバ上でファイルを編集して実行するという動作が必要になるのだが,vimのバージョンが古かったり,シンタックスハイライトが聞かなかったりと編集するためにめんどうなことが多かったのでどうにかできないかと考えてみた.

環境

方法1:ローカル Vimssh機能を使う

Vimには,標準でssh先のファイルを編集できる機能がついている(聞いた話によるとscpでローカルに落として編集後サーバにアップロードする).
Shougoさんが開発されたShougo/vimfiler.vim · GitHubもこの機能に対応している.
例えばvim上で以下のコマンドでssh先のファイルを一覧で出力し,編集することが可

:VimFilerExplorer ssh:[ssh先]

以前まではこれを使って編集していたのだが,たまにエラーが出る(一度ファイルを開いた状態で別のファイルを開くとエラーが出る.閉じればエラーがでない)といった問題がでてた.

方法2:ローカルvimで編集後,rsyncでサーバ上にファイルを上げる

タイトルのままの意味である.ただ保存したあとにいちいちコマンド実行するのがめんどくさかったので,ファイルを監視できるようにした.
os xでは,rsyncが元からインストールされているのだが,バージョンが古く監視するために使用するツールlsyncdでうまいこと監視することができなかった.
なので最新バージョンをインストールを行う.

$ brew install homebrew/dupes/rsync
$ brew install lsyncd lua

あとは,lsyncdの設定をいじるだけである.設定ファイルは,luaを使用できるみたいです.
私の場合,ホーム直下に.lsyncdフォルダを作成しその中にlsyncd.conf.luaを作成し編集を行いました.場所指定は特にない感じなので適当に自分の好きなようにつくるがいいかと..
最終的には,以下のようなファイルとなりました.

settings {
    logfile = '/var/log/lsyncd.log',
    statusfile = '/var/log/lsyncd.status',
    nodaemon = true, --falseだとdaemon
    insist = 2, -- 起動時に接続が失敗しても再接続を試みる回数
    delay = 0,
}

sync{
    default.rsync,
    source = '/target', -- 監視対象のディレクト
    target = 'user@server:/home/target',
    rsync = {
        binary = '/usr/local/bin/rsync',
        archive = true,
        compress = true,
        rsh = '/usr/bin/ssh -i /Users/.ssh/id_rsa'
    }
}

confファイルを作成後以下のコマンドで実行することができます.sudoが必要なみたいです.

$ sudo lsyncd lsync.conf.lua