$ brew upgrade ruby-build
$ rbenv install 2.0.0-p0
$ rbenv global 2.0.0-p0
$ brew install curl-ca-bundle
$ cp /usr/local/Cellar/curl-ca-bundle/1.87/share/ca-bundle.crt /usr/local/etc/openssl/cert.pem
$ gem install bundler rbenv-rehash
Title only.
怖話でAndyというユーザー名で登録しようとするとエラー。
Mysql2::Error - Duplicate entry 'Andy' for key 'index_users_on_name'
多分小文字のandyとぶつかってるんだろうな。
validates :name, uniqueness: true
してるのに何故だろう。mysqlのcollationが変なのになってるのかなと確認してみるも問題無し。
uniquenessを確認している部分のSQLクエリをみてみると・・・
SELECT 1 AS one FROM `users` WHERE `users`.`name` = BINARY 'Andy' LIMIT 1
BINARY・・・だと・・・!?
deviseの設定でcase_insensitive_keysを設定しないとBINARYで確認しにいくようです。
# config/initializers/devise.rb:
config.case_insensitive_keys = [ :email, :name ]
ここにnameも追加してOK。configのコメントぐらいちゃんと読んどけってことですな。

「usefulなライブラリを求めてるのにstarseekerを使ってない?」
「ふざけるな!」
「本日より貴様をスノーボール二等兵と呼ぶ」
「いい名前だろ、気に入ったか?」
成人男性の98%が利用してるというstarseeker.soに関して、残念ながら残りの2%に該当してしまった人(もしいるとすれば)にご説明させて頂きます。
starseekerとは
githubで自分がfollowしている人がstarを付けたrepositoryを毎朝メールしてくれるサービスです。
ただ僕はRSSもTwitterも見ない人のものは全く見ない代わりに見ると決めた人はひとつも漏らさず見るスタイル(情報収集スタイルについて - komagata)なので、starseekerもRSSフィードで見てます。
例えば、

moroさんがstarしてるreposは何か実用的でちょこっと便利なやつなんだろうなーとか

junoさんがstarしたのは、俺が知らないなんかおしゃれなgemとかなんだろう、とか

kenchanさんはすごくエッジなライブラリを見つけててすごいな、とか
全く知らなかったclojureを始めた時も、clojureの有名な人をfollowしとけばそこから直ぐに良い人が見つかって広がりました。
ビジネスマンが日経読んでないと上司に怒られる・・・みたいな。これが無い生活は考えられません。
あと、starseeker.so自体もruby2.0.0-p0, rails4beta1, pumaでソースがとても綺麗で参考になりました。
まあ、控えめに言って 神サービス ・・・ ですよね。

#263 Client Side Validations - RailsCasts
modelに定義したvalidationルールを使ってclient sideでもjsでvalidateしてくれるclient_side_validationsは糞便利なんですが、hiddenな要素はvalidateできない。
例えば、user_idがhiddenであって、特定のユーザーをブロックしたい時にはhidden要素もclient_side_validationsでvalidateしたい。
jsを2行書けば済むことなんですが、今後もありそうなのでgemにしました。
komagata/client_side_validations-with_hidden · GitHub# Gemfile:
gem 'client_side_validations-with_hidden'
// app/assets/javascripts/application.js:
//= require rails.validations
//= require rails.validations.with_hidden
productionのデータ変更処理をmigrationに書くとrails_best_practicesに怒られる。
Rails Best Practices | Isolating Seed Data
怖話のコードで言えば下記の様なもの。
# encoding: utf-8
class InsertSeedToSound < ActiveRecord::Migration
def up
Sound.create!(id: 1, name: "鳥の鳴き声")
Sound.create!(id: 2, name: "犬の鳴き声")
Sound.create!(id: 3, name: "水滴")
Sound.create!(id: 4, name: "カエルの鳴き声")
Sound.create!(id: 5, name: "ラジオのチューニング")
end
def down
Sound.delete_all
end
end
僕はmigrationに書いちゃってるけどみんなさんはどうやってますか?
seed.rb
に書けっていうけどrake db:seed
ってリエントラントに書くもの?最初の一回だけじゃないの?
それとも、productionの状態に合わせて過去のmigrationをまとめてseed.rbをそれに合わせて書きなおすみたいなことするのかな?
ちょっと周りのrubyist2名ぐらいに聞いた感じ結論が出なかったので「ふつうこうだよ」っていうのを知ってる方がいたら教えていただけるとありがたいです!(@komagata)
追記:
昨日Team Dashboardを設定して今日見てみたら…

もう、オマエら勝手に弄るなよなぁw
そもそもイントラ向けっぽいのでデータ変更系メソッドだけにBASIC認証かけときました。
# app/controllers/api/base_controller.rb:
module Api
class BaseController < ApplicationController
http_basic_authenticate_with name: 'admin', password: 'foo', only: [:create, :update, :destroy]
# some codes
end
end

これでよし。
追記:
弊社オフィスのダッシュボードは現Engine Yardの@yandoさんから貰ったEeePCで動かしています。@yandoさんとても助かっています。ありがとうございます。みんなEngine Yard使おう!(東京リージョンもあるよ!)
ajaxで投稿してその結果を調べるみたいなテストでテストが通ったり通らなかったりする。投稿が反映される前に見に行くことがあるから。
feature "Posting a comment", js: true do
scenario "as signed user" do
comment_id = Comment.last.id + 1
within("#new_comment") do
fill_in 'comment[body]', with: 'コメントのテスト'
end
click_button '規約に同意してコメントする'
sleep 1 # PLZ WAIT!! FIXME!!
find("#comment_#{comment_id}").should have_content('コメントのテスト')
end
end
CapybaraのREADMEにも書いてあるけどデフォルトは2秒待つようだけど5に変えたら行けた。(sleep 1は取りましたw)
# spec/spec_helper.rb:
RSpec.configure do |config|
Capybara.default_wait_time = 5
end
Facebook OAuthとかで証明書ちゃんと設定しないとSSLのエラーが出る。
SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (OpenSSL::SSL::SSLError)
certifiedがgemの中に証明書持ってるので使うと楽。
$ gem install certified
確かsignal vs noiseで見て最近ちょっと好きな書き方。
Foo.this_is_the_long_method \
awesome_long_argument_name,
fuckin_annoying_long_argument
キモいって人も多いかも。絶対80文字以内じゃなきゃ嫌だってわけじゃないけど、ブログに書く時やスマホで見易いので好き。