RailsのDBからGETでデータの呼び出しはできるけど、PUTで値の追加ができなくてこんなエラーに成った時の対処法

原因

CSRF対策です。

ダメな対策

モデルにこれを追加

サイバーノーガード戦法です。おすすめしません。

良さそうな対策

gem の<a href="https://github.com/xrd/ng-rails-csrf">ns-csrf-rails</a>を使う。わからないことは全部gemにまかせてしまいましょう。


db/seeds.rbUser.createencrypted_passwordを与えてDeviseのユーザーを作ろうとしたら失敗した。

原因

passwordが存在しないためにvalidationに引っかかってしまってる。

対策

passwordを平文で打てば解決するらしいけど、平文のパスワードは使いたくないのでバリデーションの方を無効化してしまいましょう。

User.new(email: someone@example.com).save(validate: false)

でOKです。encrypted_passwordの取得方法は色々あるでしょうが、自分の場合は一度Deviseで作ってからそれをrails console使ってUser.first.encrypted_passwordを取ってきました。

参考

Cannot create Devise account using rake db:seed for Rails 3.0 – Stack Overflow


/usr/bin/env: ruby.exe: そのようなファイルやディレクトリはありません

というエラーがwheneverで作ったcronのログとして出てきて困ってた。

bin/railsの実行権限とか/usr/bin/env ruby --version でちゃんとrubyが動いてるかどうか確認したりとか色々。

答え

Windowsで作ったRailsプロジェクトだったので ruby<strong>.exe</strong>になってた。なんてことだ…。

解決策

bin/railsの一行目usr/bin/env ruby.exe.exeを削除しておきましょう。ふぁっく。


“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でインストールしましょう。


何回か調べたけど未だに覚えられてないのでもう一度調べ直しました。

確か前回調べたときは英語読むのがめんどくさいから日本語の情報を見て納得したんですが、今回はめんどくさがらずに英語圏で検索したらいつも通りStackOverflowにて大変わかりやすい答えが見つかりました。ありがたや〜。 (人´∀`)

datatime と timestamp の違い

datatime が 1000年から9999年までを表現して timestampunix 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


画像編集をRailsでしたかったので ImageMagick を Railsから使うgem rmagick をインストールしようと思ったらこんなエラーが出てしまった。環境は Maverick。

解決策

最新版の 2.13.2 をインストールすればOK。ちなみにライブラリのリンクを作るという方法も紹介されてましたがこっちは失敗。

gem install rmagick -v '2.13.2' でインストールしましょう。

ドキュメントのインストールの時に unable to convert "¥xCF" from ASCII-8BIT to UTF-8 for なんたらこうたらというエラーが大量に出ましたがインストール自体は正常に動いてるようです。

参考

imagemagick – Error installing Rmagick on Mountain Lion – Stack Overflow


rspec書いてる時にEmacsから簡単に呼び出せたら便利だと思ってsmart-compileの設定をこんな風に書き換えたんだけど、

でちゃんとCompile command: rspec foo_spec.rbは呼び出せるものの実行すると

な感じでエラーになってしまう。

どうやら rbenv の環境がEmacs側で認識されてないので rbenv で入れた gem のコマンドも使えないのが原因らしい。

解決策

rbenv.el をインストールすれば解決しました。

でインストールしておいて

しておけばOKです。


といつもの見慣れたようなTypoのエラーが出たのでControllerを確認したけどない。何度見てもちゃんとカッコ閉じてるし end も使ってる。なのにエラーが消えない!

解決

モデルのほうで has_many: words って書いてました。 正しくは has_many :words ですね。悲しい。こんなものに結構な時間を着いたしたのが悲しい。


「Rspecよくわかんねー。」という思いを胸に抱き続けてきましたが、やっぱりやらないとダメっぽいので使おうとしたら早速 undefined method 'visit'と言われて困る。

原因

このエラーの原因はCapybaraが最近のアップデートでこっそりと対象のディレクトリを requests から features に変えたのが原因らしいです。やめてほしいそういうの。

しかも Google group にこっそり報告してるだけ。もっと こえを おおきく。

解決策

spec_helper.rb に以下をたす解決策もあるそうですが、将来的に requests じゃなくてfeatures を使うという意向ならそうしたほうが楽そうなので mv spec/requests/ spec/features して自分は対策しました。

ちなみに spec_helper.rbに足す場合はこちら。

参考

ruby on rails – Capybara: undefined method 'visit' – Stack Overflow

rails 3.2でRspecを導入したけど NameError – undefined method `visit' って出るときの対策 – どぶんけーブログ