“Everyday Rails Testing with RSpec”を購入して読んでると サンプルプロジェクトが紹介されてたのでgit cloneでダウンロードしてきて bundle install をすると rbenv: version '2.0.0' is not installed と出ちゃって困る。しかも ruby -v と確認しようと思ったら再び rbenv: version '2.0.0' is not installed ?????? 「まさか rbenv が壊れた!?」と思って調べてたら、どうやらカレントディレクトリに.ruby-versionがあるとそのバージョンのRubyを参照しようとするために起きるらしい。 対策 自分の場合は2.0.0.p247が入っているので該当のディレクトリでrbenv localすると.ruby-versionの中身が書き換えられて上手く動くようになりました。 Version自体が異なる場合は上手く動かないと困るので該当のバージョンの ruby をrbenv install 2.x.xでインストールしましょう。

続きを読む

net/smtp ライブラリを使うよりも gem mail を使えば簡単にメールが送れるらしいので調べてみた。 方法 まず mail gem が必要なので $ gem install mail でインストールする。 んで、下のように書けばOK! require 'mail' mail = Mail.new do from 'me@ironsand.net' to 'recipient@exmaple.com' subject 'Here is the image you wanted' body 'Body' end mail.delivery_method :sendmail mail.deliver 注意点 Macでは動かなかったので、VPS上のCentOS 6.4で試してます。 25版ポートを開けるのを忘れずに。 参考 [email – Ruby Mail gem: Connection refused – connect(2) (Errno::ECONNREFUSED) – Stack Overflow][1]

続きを読む

何回か調べたけど未だに覚えられてないのでもう一度調べ直しました。 確か前回調べたときは英語読むのがめんどくさいから日本語の情報を見て納得したんですが、今回はめんどくさがらずに英語圏で検索したらいつも通りStackOverflowにて大変わかりやすい答えが見つかりました。ありがたや〜。 (人´∀`) datatime と timestamp の違い datatime が 1000年から9999年までを表現して timestamp は unix timestampのフロントエンドに過ぎないので 1970年から2038年までしか扱えない。 扱う範囲が違うのでdatatimeが8バイトtimestampが4バイト使う。 Rails における扱い。 これが一番重要な気がするけど、Railsではどちらを指定してもデータベースにはDATATIME型で保存される。 何故かこのことについて述べてるサイトがあんまりなかったのでこの記事を書いておきました。 参考 [In Ruby on Rails, what's the difference between DateTime, Timestamp, Time and Date? – Stack Overflow][1]

続きを読む

rubyで def foo(arg1, arg2, arg3) な関数があった時に values = [1, 2, 3] という値を渡そうとして foo values とすると TypeError: no implicit conversion of Array into Integer というエラーになります。 解決策 この配列をいうなれば”展開”して渡したいわけですが、やり方がわからなかったので調べました。 foo *values のようにまるでC言語みたいな渡し方をすればOK. 参考 [caiustheory.com/sending-array-elements-as-individual-arguments-in-ruby][1]

続きを読む

最後の数字だけ違う文字列をグループ分けしたかったんですが、自分で書いてみるとこんな面倒くさい感じになって (´・ω・`)ショボーン a1 = %w(foo1 foo2 foo3 bar1 bar3 buz2) a2 = a1.map{|v| v.sub(/[0-9]$/,"")}.uniq tmp = Array.new(a2.size) a2.each_with_index do |v2, i| a1.each do |v1| if v1.sub(/[0-9]$/, "") == v2 tmp[i].nil? ? tmp[i] = [v1] : tmp[i].push(v1) end end end p tmp # => [["foo1", "foo2", "foo3"], ["bar1", "bar3"], ["buz2"]] なので、調べてみたら非常に簡単な方法が見つかりました。 a1 = %w(foo1 foo2 foo3 bar1 bar3 buz2) p a1.group_by{|x| x[/[a-zA-Z]+/] }.values Rubyすげぇ! 参考 [arrays – Group strings with similar pattern in Ruby – Stack Overflow][1]

続きを読む

画像編集をRailsでしたかったので ImageMagick を Railsから使うgem rmagick をインストールしようと思ったらこんなエラーが出てしまった。環境は Maverick。 Can't install RMagick 2.13.1. Can't find the ImageMagick library or one of the dependent libraries. Check the mkmf.log file for more detailed information. *** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may need configuration options. 解決策 最新版の 2.13.2 をインストールすればOK。ちなみにライブラリのリンクを作るという方法も紹介されてましたがこっちは失敗。 gem install rmagick -v '2.13.2' でインストールしましょう。

続きを読む

rspec書いてる時にEmacsから簡単に呼び出せたら便利だと思ってsmart-compileの設定をこんな風に書き換えたんだけど、 (setq smart-compile-alist (append '(("\_spec.rb$" . "rspec %f")) '(("\\.rb$" . "ruby %f")) '(("\\.php$" . "php %f")) '(("\\.coffee$" . "coffee -p %f")) '(("\Gemfile$" . "bundle install")) smart-compile-alist)) でちゃんとCompile command: rspec foo_spec.rbは呼び出せるものの実行すると -*- mode: compilation; default-directory: "~/dev/zombie/spec/lib/" -*- Compilation started at Thu Jan 23 16:50:59 rspec zombie_spec.rb /bin/bash: rspec: コマンドが見つかりません Compilation exited abnormally with code 127 at Thu Jan 23 16:51:00 な感じでエラーになってしまう。 どうやら rbenv の環境がEmacs側で認識されてないので rbenv で入れた gem のコマンドも使えないのが原因らしい。 解決策 [rbenv.el][1] をインストールすれば解決しました。

続きを読む

yntax error, unexpected ':', expecting keyword_end といつもの見慣れたようなTypoのエラーが出たのでControllerを確認したけどない。何度見てもちゃんとカッコ閉じてるし end も使ってる。なのにエラーが消えない! 解決 モデルのほうで has_many: words って書いてました。 正しくは has_many :words ですね。悲しい。こんなものに結構な時間を着いたしたのが悲しい。

続きを読む

「Rspecよくわかんねー。」という思いを胸に抱き続けてきましたが、やっぱりやらないとダメっぽいので使おうとしたら早速 undefined method 'visit'と言われて困る。 原因 このエラーの原因はCapybaraが最近のアップデートでこっそりと対象のディレクトリを requests から features に変えたのが原因らしいです。やめてほしいそういうの。 しかも [Google group][1] にこっそり報告してるだけ。もっと こえを おおきく。 解決策 spec_helper.rb に以下をたす解決策もあるそうですが、将来的に requests じゃなくてfeatures を使うという意向ならそうしたほうが楽そうなので mv spec/requests/ spec/features して自分は対策しました。 ちなみに spec_helper.rbに足す場合はこちら。 require 'capybara/rails' require 'capybara/rspec' include Capybara::DSL 参考 [ruby on rails – Capybara: undefined method 'visit' – Stack Overflow][2] [rails 3.2でRspecを導入したけど NameError – undefined method `visit' って出るときの対策 – どぶんけーブログ][3]

続きを読む

ruby 2.1.0 も出たことだし、とりあえずさくらVPSにおいてるCentOS上に入れておこうと思ったけど、ちょっと古いバージョンしか rbenv install --list で出てくれない。 rbenv updateという便利なコマンドはないようなのでアップデート方法を調べてアップデートしてみた。 アップデート方法 どうやってインストールしたかは全く覚えてなかったけど調べてみるとどうやら git clone でインストールしたっぽいので cd ~/.rbenv; git pull するだけでOKらしい。 無事にアップデートできたのでもう一度インストールできるrubyのバージョンを確認したら ない。ない。 どうやらrubyのインストールには ruby-buildを使ってるのでそっちをアップデートしないとインストール可能なバージョンは更新されないらしい。ちなみに存在しないバージョンのインストールを試みるとこんな感じに教えてくれる。 ironsand@SarakuVPS ~$ rbenv install 2.0.0-p247 ruby-build: definition not found: 2.0.0-p247 You can list all available versions with `rbenv install --list'. If the version you're looking for is not present, first try upgrading ruby-build. If it's still missing, open a request on the ruby-build issue tracker: https://github.com/sstephenson/ruby-build/issues ruby-build のアップデート ruby-buildもgit cloneしてるだけなので、 cd .

続きを読む

プロフィール画像

ironsand

語学好きのプログラマーです

Railsエンジニア

Yokohama