RDoc の オプションで :nodoc: が指定されてたので見つからなかった話
def self.convert_to_original_url(omission_url, limit = 10) raise ArgumentError, 'http redirect too deep' if limit == 0 response = Net::HTTP.get_response(URI.parse(omission_url)) case response when Net::HTTPSuccess then omission_url when Net::HTTPRedirection then convert_to_original_url(response["location"], limit - 1) else response.error! end
るりま見ながらこんなソースを書いてて、response.error ! が何をしているかを知りたくて、 Web上のドキュメントなんかをググって見てたんだけどどこにもない!!!
[10] pry(main)> n = Net::HTTPResponse.new('aaa', 'bbb', 'ccc') => #<Net::HTTPResponse bbb ccc readbody=false> [11] pry(main)> n.method(:error!).source_location => ["/Users/***/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/net/http/response.rb", 118]
Net::HTTPResponse クラスってことは分かってたので、 source_location メソッドを使って error! メソッドが記述されている場所を探す。
def error! #:nodoc: raise error_type().new(@code + ' ' + @message.dump, self) end
で見つけました。
これよく見ると #:nodoc: って記述があります。
この記述があるとドキュメントに書かれないみたいですね。
作成者があまり使用してほしくないという意図があるとかないとか。
まぁドキュメントに出てこないんだからソース読まないと見つからないか。
kanazawa.rb スライドまとめページ 作った
背景
- クックパッドの発表者資料のページ(http://techlife.cookpad.com/presentations/)を見て、kanazawa.rb にもスライドまとめページ欲しいなと思った。
- 以前に発表を聞いたあの資料が見たい!って時に、あれ meetup 何回目だったかなーってことがよくあった。
作ったもの
課題
AWS 入門しよう
ドットインストールでAWSの動画見てる
いやードットインストール便利
EC2
- リージョンは日本人向けサービスなら Tokyo にする
- Avaliability Zone はリージョン内でデータセンターが分かれているイメージ
- Termination Protection にチェックを入れておけば、簡単にインスタンスが削除されなくなる
- Stop はインスタンスを停止する
- Terminate はインスタンスを削除する(ここで Termination Protection が効いてくるのかな)
- イメージを作成するとシャットダウンされる
- シャットダウンするとアドレスが変わってしまう
- Elastic IPs を使用してIPを割り振る
- EC2 に結びついていないIPアドレスは課金されるので、Release しておく
- Snapshots からインスタンスを立ち上げる場合は、Create Image from Snapshot で Image からインスタンスを立ち上げる
- EC2 の変更をしたい場合(高負荷対策etc)State が stopped になってから
- 変更後に start する
rails.vim を使った時に、エラーが出た時の対処法
vim から rails.vim を使用したらエラーが出たので、対処法をメモしておきます。
たとえば、vim から :Rails new hoge
ってコマンド実行すると、
Rails is not currently installed on this system. To get the latest version, simply type: $ sudo gem install rails You can then rerun your "rails" command.
えええ、rails インストールされているんですが。。
既存の rails のプロジェクトを vim で開いて、 :Rserver
ってコマンド実行すると
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require': cannot load such file -- bundler/setup (LoadError)
う〜ん、どうも rbenv のruby じゃなくて、Mac に標準インストールされている ruby 使っちゃってる感じがする。。
vim から !echo $path
でパスを確認
/usr/bin /bin /usr/sbin /sbin /usr/local/bin /Applications/MacVim.app/Contents/MacOS /Users/xxxxx/.rbenv/shims /Users/xxxxx/.rbenv/bin /Users/xxxxx/.nvm/v0.8.2/bin /Users/xxxxx/bin
ターミナルから echo $path
でパスを確認
/Users/xxxxx/.rbenv/shims /Users/xxxxx/.rbenv/bin /Users/xxxxx/.nvm/v0.8.2/bin /Users/xxxxx/bin /usr/bin /bin /usr/sbin /sbin /usr/local/bin
やっぱり path がおかしい。
少し調べてみたら、macvim のページに解決方法ありました。
https://github.com/b4winckler/macvim/wiki/Troubleshooting#for-zsh-users
どうも path がリセットされてるみたい。
$ sudo mv /etc/zshenv /etc/zprofile
したら path がちゃんとなった。
kanazawa.rb meetup #14 で「RSpecはじめました」を発表してきた
kanazawa.rb meetup #14 でミニコーナー「Test ! Test !! Test !!!」がありました。
そこで「RSpecはじめました」ってタイトルで発表してきたのでまとめておきます。
経緯
少し前から Ruby on Rails の勉強をしてて、その際に RSpec が気になり、少しづつ勉強してました。
今回、@wtnabeさんからお誘いをいただき、発表させてもらいました。
wtnabe さんには twitter で何回か Rspec や Ruby について色々教えていただいてました。
ありがとうございました。
発表まで
最初スライドを作り始めた時は、
みたいな感じで、RSpec について話しようとしてたんだけど、そういうのはもう既にネットや書籍でたくさんあるしと思い、
kanazawa.rb でしか聞けないオリジナルを発表しようと路線を変更しました。
(これは wtnabe さんにも言われたこと)
で、自分が RSpec を勉強していた中できっかけになったのが、meetup #12 の @Yukimitsu_Izawaさんの 「Ruby で作るDSL」っだったので、 その発表をきっかけに自分が RSpec を学んだことを交えて伝えようとスライドを作り直しました。
発表したスライド
伝えたかったこと
RSpec や DSL のことをスライドには書いてあるけど、
一番伝えたかったことは、自分が RSpec を学んだ過程で、その中にkanazawa.rbがあるよってことです。
「kanazawa.rb がきっかけで理解が進んだ」ってことを伝えたかった。
実際に伝えれたかは分からないけど、初めての発表の経験が出来たことは良かった。
でも人に伝えることはやっぱり難しくて、「淡々とした斬新な発表」と言われたw
こういう話し方のところは直していきたい。経験を積むしかない。
ってことでまた、発表したい!!
rspecのcontextはdescribeのalias
最近、rspecでテストを書きながらrailsの勉強をしています。
contextはdescribeのaliasということは分かったんですが、 定義も見てみようと。
で、ここで定義されていました。
https://github.com/rspec/rspec-core/blob/master/lib/rspec/core/example_group.rb#L285
class << self alias_method :context, :describe end
ExampleGroupクラスのクラスメソッドにdescribeのaliasを定義してるんですね。
proxy環境でbundlerを使う
今日、proxy環境でbundlerを使っててハマったのでメモ。
bundle install
したら、
Network error while fetching
って出る。
あ、proxyだなー。と思って、設定方法を色々調べてたら、 .gemrcに
http_proxy: http://example.proxy.com:8080/
って書けばいいよ。みたいな記述を見つけて試してみたんだけど、
同じエラーが出続けてる。。。
どうやら、bundlerは.gemrcは使ってないみたい。
じゃあどうするか?
環境変数をセットする。
export http_proxy=http://proxy.example.com:8080/
ってすることで、出来ました。
もう少し調べてみたら、.gemrcが使用されていないってIssueがあがってたみたい。
https://github.com/bundler/bundler/issues/1009
で、対応済みの様子。
https://github.com/bundler/bundler/commit/d80077386db82ad97fad8499ec0f2524132eeef0
でも、ver1.4からの対応なのかな。