Playにはplay.api.libs.ws.WS(Web Service、WebSocketではない)というライブラリがあってHTTP通信をすることができる。
非同期にやってくれるので、レスポンスを同期的に使うには返り値をちょっとゴニョゴニョしないといけない。
で、Play2.0系のときはPromise[ws.Response]で返ってたんだけど、2.1からはFuture[ws.Response]で返ってくる。
ググって上の方に出てくるやつは大体2.0系の話なのでそのままでは動かない。
なので2.0系で以下のように書いていたものは
2.1系では以下のように書く必要がある。
本来これでいいと思うのだけど、
http://grokbase.com/t/gg/play-framework/131rzk6wcm/possible-ws-response-encoding-bug
とかで言及されているように<meta charset="utf-8">とか書かれてるHTMLでもISOで返ってきちゃう。
なので、文字コードを変換してやる
ちゃんと探してないけど、もしかしたらWSのオプションとかでエンコードを指定してやったりできるのかもしれない。
2013年3月23日土曜日
2013年2月27日水曜日
認証付きProxy環境下でHomebrewのインストール
export http_proxy=http://USER:PASS@PROXY:PORT
export ALL_PROXY=$http_proxy
してからruby -e “$(curl -fsSkL raw.github.com/mxcl/homebrew/go)”する。brew install等するときにも同様なので、上の2行をシェルの設定ファイルに書いておくのがよかろう。
2013年2月16日土曜日
MacRubyにおけるnilの扱い
参考: https://github.com/MacRuby/MacRuby/wiki/Common-Issues
Rubyでは、nilに対して定義されてないメソッド呼び出しをするとNoMethodErrorになる。一方、Objective-Cではnilに対してメッセージを投げても実行時エラーになることはなく、nilが返ってくる。
さて、MacRubyではどうなっているかというと、(少なくとも現状は)Rubyに合わせた仕様になっているらしく、NoMethodErrorになる。
ただ、既存のObjective-Cのコードを置き換えるとか、Cocoa的に書くとnilにメッセージを投げたい場合も出てくると思うので、そういうときは
しておけばいい。
RubyMotionとかMobiRubyではこの辺どうなってるんだろう。
Rubyでは、nilに対して定義されてないメソッド呼び出しをするとNoMethodErrorになる。一方、Objective-Cではnilに対してメッセージを投げても実行時エラーになることはなく、nilが返ってくる。
さて、MacRubyではどうなっているかというと、(少なくとも現状は)Rubyに合わせた仕様になっているらしく、NoMethodErrorになる。
ただ、既存のObjective-Cのコードを置き換えるとか、Cocoa的に書くとnilにメッセージを投げたい場合も出てくると思うので、そういうときは
framework 'Foundation'
しておけばいい。
RubyMotionとかMobiRubyではこの辺どうなってるんだろう。
2013年1月6日日曜日
MacRubyでCocoaPodsのインストールができなかった
CocoaPodsをインストールする。
普通のrubyでもいいらしいが、macrubyのほうが相性が良さそうな気がするのと、元々macrubyで使おうと思っているのでrbenvでmacrubyに切り替えてgem installする。
尚、rbenvとかrvmじゃないときはmacgem installする。
よくわからんので一回普通のruby1.9.3でgem installとpod setupしたらすんなりいけた。ええー?
普通のrubyでもいいらしいが、macrubyのほうが相性が良さそうな気がするのと、元々macrubyで使おうと思っているのでrbenvでmacrubyに切り替えてgem installする。
尚、rbenvとかrvmじゃないときはmacgem installする。
% gem install cocoapods
あとこれも必要
% pod setup
そしたらエラーが出た。
fork() function is unimplemented on this machine
とか出てる。ええー?よくわからんので一回普通のruby1.9.3でgem installとpod setupしたらすんなりいけた。ええー?
2012年12月31日月曜日
rvmからrbenvに乗り換え
年越し環境構築を。
rvmからrbenvに乗り換えてみる。
まずはrvmをアンインストール。
rvmをアンインストールするにはrvm implodeもしくはrvm seppukuコマンドを使う(切腹ってなんだよ)。
続いてrbenvとruby-buildのインストール、Homebrewで。
追記:
ruby2はMacデフォルトのopensslとは互換性がないとかなんとか。
https://github.com/sstephenson/ruby-build/issues/197
なのでopensslもhomebrewでインストールして、rubyもオプション付けてインストールし直した。
2013/04/21 追記
readlineも指定してやらないとirbとかpryで日本語使えなかった
インストールしたら、rbenvでは以下のコマンドが必要になるそうな。
(rbenv-rehashっていうgemを各rubyに入れておいてやることで勝手にやってくれるようになるらしいが、まあなんとなく鬱陶しいな)
デフォルトで使うrubyのバージョンはrbenv globalで指定する。
尚、MacRubyに関しては、rbenv-macrubyというプラグインがあり、こいつを使えばMacRubyもrbenvで管理できる。
rvmからrbenvに乗り換えてみる。
まずはrvmをアンインストール。
rvmをアンインストールするにはrvm implodeもしくはrvm seppukuコマンドを使う(切腹ってなんだよ)。
% rvm seppukuzshrcとかに書いてあるrvm関連の行も消す。続いてrbenvとruby-buildのインストール、Homebrewで。
% brew install rbenv ruby-buildeval "$(rbenv init -)" をzshrcとかzshenvとかに書く(僕はzshenvに書いた)。rbenv installでrubyをインストールする% rbenv install 2.0.0-preview2自分でコンパイルして ~/.rbenv/versions/ に置いてやるんでもいいらしい。追記:
ruby2はMacデフォルトのopensslとは互換性がないとかなんとか。
https://github.com/sstephenson/ruby-build/issues/197
なのでopensslもhomebrewでインストールして、rubyもオプション付けてインストールし直した。
% brew install openssl
% brew link openssl
% RUBY_CONFIGURE_OPTS=--with-openssl-dir=`brew --prefix openssl` rbenv install 2.0.0-preview22013/04/21 追記
readlineも指定してやらないとirbとかpryで日本語使えなかった
% brew install readline
% CONFIGURE_OPTS="--with-openssl-dir=`brew --prefix openssl` --with-readline-dir=`brew --prefix readline`" rbenv install 2.0.0-p0インストールしたら、rbenvでは以下のコマンドが必要になるそうな。
% rbenv rehashrbenvではこれをよく使うらしく、新しくrubyをインストールしたときとか、実行可能なgemをインストールしたときにもrehashしてやらないといけないらしい。(rbenv-rehashっていうgemを各rubyに入れておいてやることで勝手にやってくれるようになるらしいが、まあなんとなく鬱陶しいな)
デフォルトで使うrubyのバージョンはrbenv globalで指定する。
% rbenv global 2.0.0-preview2β版的なものをデフォルトにするのは止めたほうがいいと思う。尚、MacRubyに関しては、rbenv-macrubyというプラグインがあり、こいつを使えばMacRubyもrbenvで管理できる。
2012年12月23日日曜日
[Mac]Guardによる自動テスト
久々に環境構築おじさん的なことを。
これまでRSpecとautotest(zentest)を使ってたのだけど、最近はみんなminitestだな、とかなんとか聞いたのでminitestも使ってみる。
で、自動実行するためにGuardを使う。Rails4とかで使われてるのかな?
gemspecに書いて
Guardfileという設定ファイルを生成するために
ファイル保存のタイミングでテストするためにrb-fsevent使う(WindowsとかLinuxの場合はほかのものを使う)
以下、Growlで通知させる話。
gem growlを使う。
が、通知されない。
Growl2.0になって、GrowlNotifyを入れてないせいだった。
http://growl.info/downloads#generaldownloads からダウンロードしてインストール。
改めて
通知出た。
が、何故か1回ファイル保存するごとに2回ずつ通知される。
よくみたらテスト自体が2回ずつ実行されてる。
Guardfileにguard 'minitest' do endが2個あった。
もう一回
必要ない分を消したらちゃんと1回だけ実行されて通知も1個になった。
これまでRSpecとautotest(zentest)を使ってたのだけど、最近はみんなminitestだな、とかなんとか聞いたのでminitestも使ってみる。
で、自動実行するためにGuardを使う。Rails4とかで使われてるのかな?
gemspecに書いて
bundle installgem.add_development_dependency "guard-minitest" もちろん普通にgem installしてもいいし、Gemfileに書いてもいい。 Guardfileという設定ファイルを生成するために
% bundle exec guard init minitestGuardfileの基本的なところについては割愛。 ファイル保存のタイミングでテストするためにrb-fsevent使う(WindowsとかLinuxの場合はほかのものを使う)
gem.add_development_dependency "rb-fsevent"テスト書いて、% guardすると、ファイル保存のたびにテストされる。以下、Growlで通知させる話。
gem growlを使う。
gem.add_development_dependency "growl"を追加して、bundle installしてguardし直す。 が、通知されない。
Growl2.0になって、GrowlNotifyを入れてないせいだった。
http://growl.info/downloads#generaldownloads からダウンロードしてインストール。
改めて
% guard適当にファイルいじって保存してテストを走らせる。通知出た。
が、何故か1回ファイル保存するごとに2回ずつ通知される。
よくみたらテスト自体が2回ずつ実行されてる。
Guardfileにguard 'minitest' do endが2個あった。
guard init minitestをしたときに、Gemfileがあるならbundle execしたほうがいいんじゃない?って出力されたのでもう一回bundle exec guard init minitestしたらGuardfileに追記されていたせいだった。もう一回
guard initしてみたら3個になって、There are 3 definitions in your Guardfile for 'minitest', you may want to clean up your Guardfile as this could cause issues.っていうのが出てた。2回目のときにも出ていたんだろう。必要ない分を消したらちゃんと1回だけ実行されて通知も1個になった。
2012年11月28日水曜日
Playでライブラリ使おうとしてどハマりした
Playの中で、dispatchを使おうとしてハマったのでメモ。
結論から述べると、Build.scalaに以下のように書いて、
以下、ダメだったこと。
そんなはずあるかよく探せ、などと言ってみても見つかりませんの一点張り。
ダメ元で、
ついでにbuild.sbtを自分で作ってそこに書いてみてもダメだった。
結論から述べると、Build.scalaに以下のように書いて、
val appDependencies = Seq(
// Add your project dependencies here,
"net.databinder.dispatch" %% "dispatch-core" % "0.9.4"
)
% playしてreloadしてupdateしてcompileしてrunしたら動いた。以下、ダメだったこと。
libraryDependencies += "net.databinder.dispatch" %% "dispatch-core" % "0.9.4"
をPlugins.sbtに書いてもmodule not foundとかdispatchなんて定義されてないぜ、とか言ってくる。そんなはずあるかよく探せ、などと言ってみても見つかりませんの一点張り。
ダメ元で、
addSbtPlugin("net.databinder.dispatch" % "dispatch-core" % "0.9.4")
とか書いてみてももちろんダメ。ついでにbuild.sbtを自分で作ってそこに書いてみてもダメだった。
登録:
投稿 (Atom)