田舎の技術者が奮闘中

php ruby node.js javascript などのスクリプト言語とサーバー(Chef、Vagrant)に関して書きます。

ファイルを編集したら自動で、リモートサーバーにファイルアップ

最近ブログの更新が滞っています。
新しいことをあまりやってないって事が原因でしょうが。。。

久々に新しいライブラリ?を作ったので紹介します。
pikonori/auto_sftp · GitHub
どのようなものかというと、ローカルのファイルを更新したら、自動でリモートサーバーにファイルをアップするライブラリです。

大抵の開発者はローカルで開発してローカルで動作確認を行うと思います。
しかし、うちの会社ではサーバーの設定が特殊なために、最終チェックはリモートサーバーにアップして確認します。
いつもはFTPクライアントで階層変えてアップして確認していたのですが、コレが非常に面倒くさい!
そこで、全て自動でファイルをアップできるようにしました。
(社内ではものすごく好評ですw)
FTPではなくSFTPにてアップします。
FTPの対応はしていません。

環境準備

ruby 1.9.3
(windowsでruby 2.0 を試したのですが動作しませんでした。macは調査していません。。)

動作OS

Windows
Mac
Linux
ruby 1.9.3が入っていれば動作します。)

導入手順

1. 兎にも角にもbundler を入れます。

$ gem install bundler

2. pikonori/auto_sftp · GitHub からcloneしてきます。

DLでも大丈夫ですが、頻繁に更新する予定ですので、cloneしておいたほうが良いです。
落とす先は好きなところでOKです。

$ git clone https://github.com/pikonori/auto_sftp.git

3. sftp.yaml.defaultを編集します。

まずsftp.yaml.defaultをsftp.yamlにリネームします。
sftp.yamlの中身を確認すると、

sample:
  ip:     localhost
  port:     22
  user:     admin
  password:   password
  local_path: ~/
  remote_path: /var/www/html/

となっていますので、リモートサーバーの設定等を行います。
以下が内容となります。

名称 内容
sample 任意の名称です。コマンドを叩く際に指定します。
ip リモート先のIPです。ドメインでも構いません。
port ポートです。デフォルトは22になっています。
user リモートサーバーのユーザー名です。
password リモートサーバーのパスワードです。
local_path 監視するローカルディレクトリです。ディレクトリ階層以下全てを監視します。
remote_path リモートサーバーのパスです。

※ローカルパス以下のファイルが多すぎるとCPUを食いまくるので、ファイルが多い場合はディレクトリを絞って下さい。

複数設定する場合は、

sample:
  ip:     localhost
  port:     22
  user:     admin
  password:   password
  local_path: ~/
  remote_path: /var/www/html/
sample2:
  ip:     localhost
  port:     22
  user:     admin
  password:   password
  local_path: ~/
  remote_path: /var/www/html/

のように追加していきます。

4. 動作させます。

sftp.rb があるディレクトリに移動します。
移動後に以下のコマンドを叩きます

$ ruby sftp.rb -f sample
C: create  U: update  D: delete E: error

Name      sample
Host      HostName
Accepted  2013-10-09 09:49:17 +0900

上記のような文字列が出たら監視開始になります。
コレでファイルを修正するたびにファイルがアップされるようになります。

5. aliasを設定する。

ここからはMacやLinux専用になります。
(Windowsの方はbatとかを作成しておくと便利です。)

~/.bashrcを開きます。そこに

alias auto_sftp='ruby ~/sftp/sftp.rb'

の用な感じでaliasを設定しましょう。
これで

$ auto_sftp -f sample

で起動できるようになります。

まとめ

他にも機能がありますので、

$ auto_sftp -h

で確認してみて下さい。

将来的にgem installなどで簡単に導入できるように修正します。
(あと、テストケースも書かないとw
コードも汚いです。/(^o^)\)

導入できなかったり、動作不備がありましたら、気軽にコメントして下さい。