実際はホスティングなんですが。
gyazoって知ってますか?masuiさんが開発された驚異的な便利ツールです。
実はこれGPLでオープンソースになっています。
自宅サーバでgyazoを運用するためのtipsです。
当方macなので、クライアントがmacでserver側はrack(rubyのアプリケーションコンテナ)を使うようにしています。
さて、自宅サーバでgyazoをするメリットとは。
などなどでしょうか。
情報漏洩リスクは、低いと言えば低いんですがgyazo.comは本質的には情報漏洩リスクがあります。
どっかの会社ではあまり気にしないで使われてるんですが、twitterがコンプライアンス違反ならこっちの方が余程リスクが高い気もします・・・・(細かい話はまた別で
だから、自分で運用するgyazoをたてましょうということです。
ちょっと運用上の問題からオリジナルのgyazoから多少の変更をしています。
手順は
こんな感じです。
githubからチェックアウト
私のgithubからチェックアウトするかフォークするかしてください。
git clone git://github.com/harajune/Gyazo.git
するとソースが落ちてきます。
クライアント側の設定
ほとんどの人はwindowsなんでしょうけど、自分はmacなのでmacの説明。
一応windowsもソースみたんですが多分簡単に出来そうな気がします。
以下の要領でクライアントの設定をしてください。
cd Gyazo.app/Contents/Resources
cp config.sample.rb config.rb
vi config.rb
viじゃなくてもいいですが。config.rbを以下のように編集します。
HOST=”your.domain.com”
CGI=”/upload”
CGIの方はアップロードの時に使うパスです。一応デフォルトがこれです。
これでクライアントの設定は終了。
サーバにrackを設置
アプリケーションコンテナは好きなのを使ってください。私はpassengerを好んで使っています。
Serverディレクトリ以下を適当なrackコンテナの場所に設置してください。basic認証とかしたく無ければこれで終了。
終わり
以上です。open Gyazo.app とかしてgyazoってみてください。
たぶんちゃんと動くはずです。
実はちょっとだけ改造してあります
本家gyazoはCGIでの運用が前提になっているので個人的には扱いにくいです・・・・
ので、harajuneバージョンではrackに対応させてあります。
まぁ大した差はないんですが、ほとんどのrubyアプリケーションコンテナがrackに対応していますし、cgiって個人的には運用が面倒なのでこちらの方がいい気がしています。
というわけで、楽しいgyazoライフを!
とりあえずな対応ですが・・・・
使ってる環境がruby1.9.2trunkとrails3.0betaなんですが、残念ながらredmineはrails2.3.5とruby1.8.xでしか動かない。
とりあえず動かしてみたところ、基本的にひっかかるのは文字コード周りであることがわかったためちょっと修正してみたらだいたい動く感じになりました。
ポイントは
です。
gitを使う
redmineを直接いじるのでバージョン管理する方がおすすめです。
git clone http://github.com/edavis10/redmine.git
このgitリポジトリはofficialミラーだそうです。
rails2.3.5をvendor/railsに入れる
git submoduleが便利です。
git submodule add http://github.com/rails/rails.git ./vendor/rails
そして、railsの中身をv2.3.5にします。
cd vendor/rails/
git checkout -b v235 v2.3.5
これでok。
Stringを拡張する
String.eachが1.9では無くなっています。代わりにeach_lineを使えばいいんですが、全部書き換えるのが面倒なので、config/environment.rbに書いちゃいます。
config/environment.rb
CODE:
class String def each(*args) self.each_line(*args) end endclass Stringdef each(*args)self.each_line(*args)endend
Encoding.external_encodingをUTF-8にする
いらないかもしれない。config/environment.rbに書き込みます。
config/environment.rb
Encoding.default_external = "UTF-8"
app/controllers/application_controller.rb
CODE:
before_filter :params_filter def params_filter self.utf8nize(params) end def utf8nize(obj) if obj.is_a? String obj.force_encoding("UTF-8") elsif obj.is_a? Hash obj.each {|key, val| obj[key] = self.utf8nize(val) } elsif obj.is_a? Array obj.map {|val| self.utf8nize(val)} else obj end end
だいたいこんな感じでruby1.9でもredmineが動くようになりました。
とりあえず動かないところ見つける度に直してるのであまり網羅的ではないかも。