Webサーバ不要、40行程度のスクリプトひとつで動かせる Gyazoサーバー(クローン)を書いた
WEBricで動かせるようにしたので、たかだか40行程度のスクリプト一個で済ませることができてしまった。やっぱりRubyサイコー。
Gyazo + WEBric で Gyabricと呼んでみる。
とりあえずGistに貼っているので、お好きなように...。
Linux(FedoraCore6?くらい?)で動作確認済み。特別なことはやってないんで、Rubyが入っていればWindowsとかMacとかでも動かせるはず...
コード
使い方
以下、簡単な使い方。
2.エディタでスクリプトを編集
### CONFIGURE ###################################################{{{ HOST = 'xxx.xxx.xxx.xxx' # your server PORT = 10080 ROOT = '.' RUBY_BIN = '/usr/bin/ruby'
CONFIGUREのところを適当に自分の環境にあわせて変更すればいいはず。
3.ルートディレクトリの下にdb
とimages
ディレクトリを掘る
たとえば、ルートディレクトリが/home/snaka/gyazo
だとすると、、
$ cd /home/snaka/gyazo $ mkdir db images
でオーケー
4.サーバーを起動
以下のようにサーバースクリプトを起動(スクリプトを'gyabric.rb'として保存したとして...)
$ ruby gyabric.rb
Unix系のOSだと、以下のように最後に&
を付けることで、バックグラウンドプロセスとして実行することができる。
こうしておけば、ターミナルを閉じてもサーバは稼働し続けることができる。 ←これは間違い、単にバックグラウンドプロセスで実行しただけでは、ターミナルを閉じるとそのプロセスも終了してしまいます。そうならないためには、WEBrickをdaemonとして起動するなどの工夫が必要なはず...
$ ruby gyabric.rb &> gyabric.log &
また、上記の例では gyabric.log にか同時のログを出力するようにしている。トラブルシューティングのためにも、このようにログを取っておいた方が良い。
5.クライアントのスクリプトを改造
本家Gyazoクライアントのスクリプト本体は /Applications/gyazo.app/Contents/Resources/script がそれ。
これをエディタなどで編集。
以下のような感じで変更すればいいと思う。
- HOST = 'gyazo.com' - CGI = '/upload.cgi' + HOST = 'xxx.xxx.xxx.xxx' # ローカルGyazoサーバのIPアドレス (or ホスト名) + CGI = '/upload' # サーブレットのmountしているパス
- Net::HTTP.start(HOST,80){|http| + Net::HTTP.start(HOST,10080){|http| # サーバーのポート
Windowsなら、以前のエントリで紹介したバッチファイル(でラップしたrubyスクリプト)も使える。
- Windows版GyazoクライアントをRubyオンリーで書いた - 今日もスミマセン。
- Windows版GyazoクライアントをRubyオンリーで書いた(その2:スクリーンキャプチャーツールと連携編) - 今日もスミマセン。
追記:2009.05.30
デバッグ目的でコード中からSTDOUTにhashの値を出力していた箇所を削除。
あと、サーバ起動方法の記述を追加
追記:2009.05.30 (2)
あまりに「すごい」という反応があって、いたたまれなない気持ちになってきたので「手の内」をバラすと...
ブクマコメントにもあるとおり、本家Gyazoとして配布しているアプリケーションのファイルにはサーバ側スクリプト(CGI)も含まれていて、自分のソースもそのCGIのソースがベースになってます。
ちなみに、本家GyazoのCGIスクリプトは、ApacheなどのWebサーバソフトウェアを別途用意する前提になっているので 40行なんてもんじゃなく、もっと短いです。
ただ、ほとんど自分専用のイントラネットのGyazoサーバ立てるためだけにApache入れて設定までするのが面倒だったので、お手軽なWEBricでGyazoサーバ立ててみたかっただけです。
なので、そんなに「すごくない」です。