2012-01-06
YAMLの参照まわりのtranslation missingの解決
Railsで翻訳のエラーに出くわしました。
translation missing: ja.activerecord.errors.models.user.attributes.email.taken
再現
環境
- Basic 64-bit Amazon Linux AMI 2011.02.1 Beta
- Ruby1.9.2-p180
- Rails 3.0.11
- config/locale/ja.yml (2011年春頃にi18n_generatorで入手したもの)
rails c Loading development environment (Rails 3.0.11) ruby-1.9.2-p180 :001 > I18n.t('activerecord.errors.messages.taken') => "translation missing: ja.activerecord.errors.messages.taken"
原因
config/locale/ja.yml
format: "%{attribute} %{message}"
messages: &errors_messages
inclusion: "は一覧にありません。"
exclusion: "は予約されています。"
activerecord:
errors:
messages:
taken: "はすでに存在します。"
record_invalid: "バリデーションに失敗しました。 %{errors}"
一部省略していますが、おそらく参照のあたりがうまく解析できておらず、"taken"が認識されていないようでした。
解決法1
Ruby1.9.2-p180からRuby1.9.2-p290に上げたら解決しました。詳しくはわかりませんが、YAMLの解析が改善されているものと思われます。
Ruby1.9.2-p290
$ rails c Loading development environment (Rails 3.0.11) 1.9.2-p290 :001 > I18n.t('activerecord.errors.messages.taken') => "はすでに存在します。"
RVM
RVMでバージョンを上げる場合
rvm upgrade ruby-1.9.2-p180 ruby-1.9.2-p290
解決法2
svenfuchs/rails-i18n - GitHub にある最新のja.ymlを使っても解決できます。
以下のコミットでYAMLの構造が変更されていました。
関連記事
2012-01-02
当ブログ記事アクセス数ランキング2011
id:sugyan さんにインスパイアされてやってみました。思えば2010年上半期までは半期ごとにやってたのでした。当時は手作業でしたが、Rubyが使えるようになったのでRubyでやりました。
アクセス数TOP50
2011年のものは8つ、しかも技術ネタではなくモノ/ガジェットネタが多いです。インターネットユーザー全体での興味分布の勢力図的なものが垣間見えます。情報が古くなっていたら恐縮ですが、ブログの継続はそれなりに財産になるみたいです。
検索キーワードTOP20
| # | エントリ | 訪問者 |
|---|---|---|
| 1 | google:デュアルモニタ 壁紙 | 3058 |
| 2 | google:デュアルディスプレイ 壁紙 | 2776 |
| 3 | google:width 読み方 | 2029 |
| 4 | google:ルンバ550 | 1995 |
| 5 | google:php 拡張子 取得 | 1422 |
| 6 | google:postgresql coalesce | 1277 |
| 7 | google:height 読み方 | 1218 |
| 8 | google:ルンバ 550 | 1100 |
| 9 | google:vmware コピー | 1030 |
| 10 | google:coalesce | 970 |
| 11 | google:sql sum 条件 | 865 |
| 12 | google:macbook air アクセサリ | 844 |
| 13 | google:phpexcel 読み込み | 791 |
| 14 | google:foobar2000 設定 | 733 |
| 15 | google:postgresql nvl | 709 |
| 16 | google:iphone4s 移行 | 691 |
| 17 | google:デュアルディスプレイ 壁紙 別々 | 674 |
| 18 | google:tumblr iphone アプリ | 662 |
| 19 | google:phpexcel | 620 |
| 20 | google:postgres coalesce | 591 |
昔とあまり変わりませんが、ルンバの売上には多少貢献できたのかもしれません。Ruby関連がランクインするよう精進したいと思います。
コード
中途半端な自作ラッパー使ってたり、touch付きURLを強引に処理してたり、あまり綺麗ではございません><
関連記事
2012-01-01
ふりかえり2011&目標2012
ふりかえり2011
1年前の目標はそれなりに達成できました。そんなにハードル高くない目標でしたが。Ruby/Railsはまだまだ触っていきたいですし、その影響で英語への意識は相当高くなりました。
自分の中で、とてつもなく大きな出来事がありました。独りの時間が増えました。根本的に、人との関わりが全然できていなかったと痛感しました。人生について深く考える機会となりましたが、すぐに答えがでるものでもありませんでした。今の倍の年齢になったときには、自分と周りが幸せでいられるよう、少しずつできることをやっていけたらと思います。
目標2012
- 英語/英会話に不自由しないこと
- TOEICは730くらい
- 継続的なWebサイト/Webサービスつくる
- Social Codingする
- 10 pull req / 3 被pull req くらい
- "一番のへたくそ"な環境へ
- いい人と出会い、縁を大切にする
とりあえず1月中には海外に行って、英語を学んできます。せっかくなので数ヶ月間は費やすつもりで、海外のエンジニアと英語でしゃべれるくらいにはなれたらと思います。そのあとは、やはり独りよりもチームで開発がしてみたいので、あまり自信ないですがソーシャル転職とかできたらいいなと思います。海外ではたらく選択肢も持てたら、申し分ないです。
関連記事
2011-12-23
ApacheとRailsのリダイレクト比較
PCサイトと携帯サイトを端末ごとに振り分けるのに、jpmobileの判定メソッドがお手軽なのでRailsのredirect_toを当初利用していました。が、おそらくApacheでリダイレクトさせたほうがパフォーマンスはいいはずです。ただ確信はなく、「推測するな、計測せよ」ということで調べてみました。
環境
- Basic 64-bit Amazon Linux AMI 2011.02.1 Beta
- t1.micro 64bitインスタンス
- Apache 2.2.16
- Passenger 3.0.7
- Ruby 1.9.2
- Rails 3.0.11
Apache Bench
ab -n 100 -c 10 http://example.com/m/
結果サマリー
| 項目 | Rails | Apache |
|---|---|---|
| Requests per second | 63.35 | 79.57 |
| Time per request | 157.850 | 125.677 |
というわけで単純な比較ではありますが、やはりApacheでリダイレクトしたほうが2割ほど速いようです。
Rails
Server Software: Apache/2.2.16
Server Hostname: example.com
Server Port: 80
Document Path: /m/
Document Length: 96 bytes
Concurrency Level: 10
Time taken for tests: 1.578500 seconds
Complete requests: 100
Failed requests: 0
Write errors: 0
Non-2xx responses: 101
Total transferred: 54338 bytes
HTML transferred: 9696 bytes
Requests per second: 63.35 [#/sec] (mean)
Time per request: 157.850 [ms] (mean)
Time per request: 15.785 [ms] (mean, across all concurrent requests)
Transfer rate: 33.58 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 10 61 48.7 101 119
Processing: 22 86 52.9 117 303
Waiting: 21 85 52.6 117 295
Total: 33 147 100.1 218 420
Percentage of the requests served within a certain time (ms)
50% 218
66% 230
75% 237
80% 239
90% 251
95% 263
98% 274
99% 420
100% 420 (longest request)
Apache
Server Software: Apache/2.2.16
Server Hostname: example.com
Server Port: 80
Document Path: /m/
Document Length: 302 bytes
Concurrency Level: 10
Time taken for tests: 1.256765 seconds
Complete requests: 100
Failed requests: 0
Write errors: 0
Non-2xx responses: 100
Total transferred: 52000 bytes
HTML transferred: 30200 bytes
Requests per second: 79.57 [#/sec] (mean)
Time per request: 125.677 [ms] (mean)
Time per request: 12.568 [ms] (mean, across all concurrent requests)
Transfer rate: 39.78 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 10 57 49.5 13 122
Processing: 11 60 49.9 17 139
Waiting: 10 58 49.9 15 138
Total: 21 118 99.4 28 245
Percentage of the requests served within a certain time (ms)
50% 28
66% 212
75% 218
80% 221
90% 235
95% 242
98% 244
99% 245
100% 245 (longest request)
レスポンスヘッダ
参考までにレスポンスヘッダも。Railsのほうはすこし付加されています。
Rails
Cache-Control:no-cache Connection:close Content-Length:96 Content-Type:text/html; charset=utf-8 Date:Fri, 23 Dec 2011 16:07:36 GMT Location:http://example.com/ Server:Apache/2.2.16 (Amazon) Status:302 X-Powered-By:Phusion Passenger (mod_rails/mod_rack) 3.0.7 X-Runtime:0.068700 X-UA-Compatible:IE=Edge,chrome=1
Apache
Connection:close Content-Length:302 Content-Type:text/html; charset=iso-8859-1 Date:Fri, 23 Dec 2011 16:12:57 GMT Location:http://example.com/ Server:Apache/2.2.16 (Amazon)
開発効率
サーバーとしてのパフォーマンスはApacheが優れていますが、開発も含めて考えると、Railsにも利点があります。まず、記述が簡潔かつ柔軟なこと。jpmobileの判定メソッドなら携帯キャリアを羅列する必要はありませんし、params[:controller]やparams[:action]を使ったりもできます。それから、テストがしやすいこと。他と同じようにRSpec/Capybaraのintegration testで書けるのは保守もしやすいのではないかと思います*1。
ステータスコード
ちなみに、
デスクトップ用ページから従来のモバイル端末用ページにGooglebot-Mobileをリダイレクトするなら、301か302のどちらを使っても構わない
携帯サイトへのリダイレクトは301でも302でもOK & パンダ・アップデートはモバイル検索にも導入 | 海外SEO情報ブログ
とのことです。UAの条件のもとで恒久的なものなので、個人的には301かなと思う次第です。

Apacheポケットリファレンス (POCKET REFERENCE)
関連記事
2011-12-15
さいきんのRailsアプリで使ったgem 10個
最近は、運用中Railsアプリの管理画面をTwitter Bootstrapでリニューアルしたり、こまごまと機能追加なんかしたりしてました。そんな中で新たに使ったgemライブラリを簡単にまとめてみます。
Prawn
- sandal/prawn - GitHub
- PDF作成
- 日本語フォントとあわせて日本語表示も可能
- 表や図などある程度自由にレイアウトできる
- prawn-railsというのもさっき見つけた
Haml-rails
erb2haml
- dhl/erb2haml - GitHub
- ERBのviewファイルを一括置換
- Hamlの文法を覚える参考にもなる
Kaminari
- amatsuda/kaminari - GitHub
- ページネーション
- will_paginateよりもなんとなくこちら
- will_paginateよりもプラガブルかつクリーンな作り(と思う)
SimpleForm
- plataformatec/simple_form - GitHub
- フォーム生成補助
- 記述は少なく済むけど凝ったレイアウトにはしづらい
- 管理画面などとは相性良いはず
ShowFor
- plataformatec/show_for - GitHub
- 詳細画面生成補助
- SimpleFormみたいな感じ
jpmobile
Airbrake
- airbrake/airbrake - GitHub
- エラー通知サービス(旧Hoptoad)
- Egg Plan が無料で1プロジェクト導入可能
- Capistrano対応
- 予期しない部分のエラー検知に役立つ
pry-rails
rails_best_practices
Twitter Bootstrap/Haml/SimpleFormなどによる管理画面は、慣れてきたらかなり軽快に開発できた気がします。記述量が少ないおかげで、変更や機能追加にも対応しやすいのがいいと思います。
あと、Airbrakeはおすすめです。




