gem実はこれが、2014年最初のエントリー。WebAPIを呼ぶスクリプト書くのにFaradayを使ってみたので、使い方などをメモっておこうと思います。HTTPクライアントのライブラリ入れて使うより、Net::HTTPで十分じゃない?と思って使った事ありませんでした。なんとなーく、Ruby書きたくなって、使ったことないgemを使ってみたかったので、使ってみた次第です。サーバサイドのデバッグもしてみたいので、自前で用意してみます。いってもすっごい簡単な物で良いので、Sinatraさんにご協力頂き、さくっと作ります。JSON.parse(request.body.read)endポイントreloder入れとくと、コード変えた時に再起動の必要なくなります。先程作ったSinatraアプリは起動しておきます。body※status:200以外の場合の事はまったく考えてませんとまぁ、こんな感じでgetする訳なんですが、これだと、Net::HTTPでもたいして変わらないんですよね。bodyURLを分割してなくて良い分、こちらの方が楽かも?。Faradayの良い所はこれだけじゃわからないので、先に進みます。bodyと、まぁ、ここまでもあまりメリット感じませんね。Content-Type変えてみるjsonをpostしてみます。body少し楽になりましたね。実はもっと楽になります。Middlewareを使ってみるFaradayにはMiddlewareという仕組みがあります。こいつを使う事で、拡張できるようになってます。ここには、一番最初に書いてあるんですけどね。bodyちなみにmiddleware使う場合、adapterは必ず指定しないとエラーになるっぽい??です。ソースまで追ってないですが。"age"=>100}こんな感じで出力されます。FaradayMiddlewrefaraday_middlewareっていうgemが用意されていて、使えるmiddlewareが既に結構用意されています。これを使うと、さっきのjsonパターンは数倍楽になります。bundler使っている場合は、Gemfileに以下を追加してインストールしておきます。0.9.1'使ってみます。bodymiddlewareでrequestのmiddlewareとして:jsonを入れとくだけでpostする時のbodyをjsonにエンコードContent-Typeヘッダをapplication/jsonにするっていう事をやってくれます。この辺でハマったことこんな事をするとContent-Typeがapplication/jsonになりません。Faraday.default_adapterendこの辺で、ちゃんとソース読んだ方が良さそうなので、見てみます。https://github.com/lostisland/faraday/blob/master/lib/faraday/rack_builder.rb#L87この辺。いう流れでここに来ます。@handlersというインスタンス変数にpushしていってますね。次は、https://github.com/lostisland/faraday/blob/master/lib/faraday/rack_builder.rb#L162この辺。いう流れでここに来ると、先程の@handlersをreverseしてinjectしてます。その中でbuildしているので、Hanlderのbuildを見ると、https://github.com/lostisland/faraday/blob/master/lib/faraday/rack_builder.rb#L47klassをnewして(引数にapp渡してる)返してますね。最初useした時はurl_encodejsonという順番で追加しているので、これをreverseしてbuildするとjsonをnew大本のapp(to_appに渡してるlambda)を持ってるurl_endoeをnewjsonのappを持ってるhttps://github.com/lostisland/faraday/blob/master/lib/faraday/rack_builder.rb#L150結果、↑ここの@appはurl_encodeのオブジェクトになる為、url_encodejson大本のappという順番で実行されるわけですね。Middlewareを作ってみるというわけで、とりあえず簡単なMiddlewareを作ってみたいと思います。デフォルトのloggerだとbodyを出力してくれないので、bodyを出力するmiddlewareを書いてみます。}まとめFaradayはMiddlewareなどでの拡張性(柔軟性)がうりな気がします。(どっかのWebAPIを呼ぶクライアントを作ったりとか向いてるかも)adapterも結構用意されていて、em_httpもあるみたいですね。Authorizationヘッダー埋め込んでくれたりとか、地味に便利でした。踏み込んで、拡張して使ってみたいと思います。次回は気が向いたら、parameterのescape周りを修正してみたい、、、かも。デフォルトだと半角スペースが+にescapeされるので。年末にちょこちょこ作業したのでやったことをメモしておきます。既存のvmdkから作る方法はあまり情報がなかったです。6.4VirtualBoxのインストールhttps://www.virtualbox.org/wiki/Downloads今回は4.3.6を選択しました。以下の感じのコマンドでvmdkをvdiに変換します。toをNATにしておきます。Terminal等からsshでログインして作業したい場合は、advancedでPortフォワーディングの設定をしておきます。ifconfigでeth0が上がっている事を確認するあとはping等で外部にアクセスできる事を確認しておきます。(yumでインストールしたりするので)ローカルにvagrantをインストールするhttp://www.vagrantup.com/downloads.html現時点での最新版1.4.1を入れる事をおすすめします。addしたり、結構時間がかかります。上記手順の注意点Rubyのバージョン現在最新のchefはRuby1.9系以上じゃないと入らないので、Rubyのバージョンを上げておかないといけないです。rpmを作るか、自分でビルドしてPATH通すか、rbenvもしくはRVM入れるか、方法はなんでも良いかと思います。ThorRubyを書きたくなったので、gemを作りました。チケット見れる所まで書いてみました。※中身は単純にRedmineのAPIを叩いているだけです。[APIKey]これでローカルにconfig.ymlが作成されます。こちらを参照してください。現状、以下の機能があります。今回やりたかった事で、入れた特徴的(?)な機能が以下の2つです。各自が自分で作ったERBテンプレートを使って、表示できるようしました。template/issue.erbのような感じで、テンプレートのpathを指定すれば使えます。textile形式で一覧を出力したい場合、こんな感じになります。みたいな事がやりたい時があったので、週指定で検索できるようにしました。[USER_ID]を実行します。毎週すぐに調べる事ができます。newみたいに取得・登録・更新などのコマンドが必要な為、全てサブコマンドにしました。すると、今度はhelpがちゃんと表示されないのです。調べてないので、次のバージョンで直したいと思います。Redis今回は、githubのcookbookを使って、redisをインストールしてみます。※環境は前回と同じです。今回の流れBerksfileでgithubのリポジトリを指定するサーバに適用してみるforkして修正するサーバに適用してみる超シンプル。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。