Hatena::ブログ(Diary)

130単位

2012-01-06

YAMLの参照まわりのtranslation missingの解決

Railsで翻訳のエラーに出くわしました。

translation missing: ja.activerecord.errors.models.user.attributes.email.taken

再現

環境
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の構造が変更されていました。


4797363827
Rails3レシピブック 190の技

関連記事

2012-01-02

当ブログ記事アクセス数ランキング2011

id:sugyan さんにインスパイアされてやってみました。思えば2010年上半期までは半期ごとにやってたのでした。当時は手作業でしたが、Rubyが使えるようになったのでRubyでやりました。

アクセス数TOP50

#エントリPV
1デュアルディスプレイ 異なる壁紙を設定 (※NVIDIA) - 130単位186452009
2PostgreSQL CSVファイルからのインポート - 130単位154982008
3PostgreSQL COALESCEでNULLを空白に変換 - 130単位78772008
4iPhone3GSからiPhone4Sへ移行メモ - 130単位74472011
5PHP ファイル名の文字列から拡張子を取得する - 130単位68502008
6VMware Server 仮想マシンのコピー手順 - 130単位67792009
7Dropbox 複数アカウントとフォルダ共有についてのメモ - 130単位57812010
83万円台で買えるiRobotルンバ550で自動掃除してみた - 130単位49592011
9widthとheightの読み方 - 130単位49382008
10jQuery getJSON()でセレクトボックスの項目を動的生成 - 130単位47032009
11PHPExcel テンプレートを用いた書き込み&書式の設定 - 130単位44702009
12PHPExcel xlsファイルのデータを読み込む - 130単位43902009
13DB2で「SELECT ... FOR UPDATE」のロックを検証 - 130単位42922009
14MacBook Airとともに購入したアクセサリ - 130単位42812011
15WindowsXP再インストール挑戦記 SP1→SP3編 - 130単位42572009
16YouTubeの字幕付き動画をローカルで再生 - 130単位41872010
17iPhone 無料のTwitterクライアントを6種類試してみた - 130単位38532009
18Rails3 MySQL/jQueryを利用するアプリの作成手順 - 130単位36832011
19Google 日本語入力に顔文字登録 - 130単位36012009
20Linux 固定IPの設定とポートの開放手順 - 130単位35742009
21条件付きで集計するにはSUM(CASE WHEN ...) - 130単位35072009
22WinSCP iniファイルによる設定の移行手順 - 130単位34962008
23iPhone 3GS アドレス帳の移行 - 130単位34482009
24WordPress 3.0 カスタム投稿タイプの記事一覧表示 - 130単位32712010
25音楽再生ソフト foobar2000 初期設定(自分流) - 130単位32512009
26130単位3200-
27Eclipse ビルド・パス設定で.svnフォルダを除外する - 130単位28252009
28jQuery 指定した文字列をハイライトするプラグイン - 130単位25162009
29カメラ関係の無料iPhoneアプリ 3種類 - 130単位25032009
30Mac OS X Snow Leopard Ruby1.9/Rails3環境構築 - 130単位23382010
31タスクスケジューラとバッチファイルで指定時刻にアプリ終了 - 130単位23112010
32SAStruts リンク記述におけるs:linkとhtml:linkの比較 - 130単位23072009
33カメラ関係の無料iPhoneアプリ 3種類 - 130単位 (touch)22702009
34Eclipse Subversiveプラグインを導入 - 130単位21722009
35画像加工できる無料iPhoneアプリ 4種類 - 130単位21082009
36画像加工できる無料iPhoneアプリ 4種類 - 130単位 (touch)20852009
37 SAStruts/S2JDBC JSPで画面部品を作ってみる - 130単位20712009
38LEFT JOIN | LEFT OUTER JOIN - 130単位20342008
39SAStruts アクションにJSONを返すメソッドを作成してみる - 130単位20052009
40iPhone3GSからiPhone4Sへ移行メモ - 130単位 (touch)19992011
41ServersMan@VPS(CentOS 5.4) ユーザー作成とSSH初期設定 - 130単位19832010
42Excel用のCSV(SJIS)をPHP(UTF-8)で読み込む - 130単位19212011
43PHPExcelを使ってみた ループ編 - 130単位18962009
44iPhone 無料のTwitterクライアントを6種類試してみた - 130単位 (touch)17952009
45json.jsとjson2.jsの違い - 130単位17242008
46利用中のGoogle Chrome拡張機能 2011年5月 - 130単位16702011
47WordPress 記事公開時にメール通知するプラグイン - 130単位16242009
48jQuery 指定した文字列をハイライトするプラグイン 改良サンプル - 130単位16242010
49SAStruts 例外発生でエラーページに遷移 - 130単位16222009
50『Ruby on Rails 3 アプリケーションプログラミング』の感想とメモ - 130単位15952011

2011年のものは8つ、しかも技術ネタではなくモノ/ガジェットネタが多いです。インターネットユーザー全体での興味分布の勢力図的なものが垣間見えます。情報が古くなっていたら恐縮ですが、ブログの継続はそれなりに財産になるみたいです。

検索キーワードTOP20

#エントリ訪問者
1google:デュアルモニタ 壁紙3058
2google:デュアルディスプレイ 壁紙2776
3google:width 読み方2029
4google:ルンバ5501995
5google:php 拡張子 取得1422
6google:postgresql coalesce1277
7google:height 読み方1218
8google:ルンバ 5501100
9google:vmware コピー1030
10google:coalesce970
11google:sql sum 条件865
12google:macbook air アクセサリ844
13google:phpexcel 読み込み791
14google:foobar2000 設定733
15google:postgresql nvl709
16google:iphone4s 移行691
17google:デュアルディスプレイ 壁紙 別々674
18google:tumblr iphone アプリ662
19google:phpexcel620
20google:postgres coalesce591

昔とあまり変わりませんが、ルンバの売上には多少貢献できたのかもしれません。Ruby関連がランクインするよう精進したいと思います。

コード

中途半端な自作ラッパー使ってたり、touch付きURLを強引に処理してたり、あまり綺麗ではございません><

関連記事

2012-01-01

ふりかえり2011&目標2012

ふりかえり2011

1年前の目標はそれなりに達成できました。そんなにハードル高くない目標でしたが。Ruby/Railsはまだまだ触っていきたいですし、その影響で英語への意識は相当高くなりました。

自分の中で、とてつもなく大きな出来事がありました。独りの時間が増えました。根本的に、人との関わりが全然できていなかったと痛感しました。人生について深く考える機会となりましたが、すぐに答えがでるものでもありませんでした。今の倍の年齢になったときには、自分と周りが幸せでいられるよう、少しずつできることをやっていけたらと思います。

目標2012

  • 英語/英会話に不自由しないこと
  • 継続的なWebサイト/Webサービスつくる
  • Social Codingする
    • 10 pull req / 3 被pull req くらい
  • "一番のへたくそ"な環境へ
  • いい人と出会い、縁を大切にする

とりあえず1月中には海外に行って、英語を学んできます。せっかくなので数ヶ月間は費やすつもりで、海外のエンジニアと英語でしゃべれるくらいにはなれたらと思います。そのあとは、やはり独りよりもチームで開発がしてみたいので、あまり自信ないですがソーシャル転職とかできたらいいなと思います。海外ではたらく選択肢も持てたら、申し分ないです。

関連記事

2011-12-23

ApacheとRailsのリダイレクト比較

PCサイトと携帯サイトを端末ごとに振り分けるのに、jpmobileの判定メソッドがお手軽なのでRailsのredirect_toを当初利用していました。が、おそらくApacheリダイレクトさせたほうがパフォーマンスはいいはずです。ただ確信はなく、「推測するな、計測せよ」ということで調べてみました。

環境

Apache Bench

ab -n 100 -c 10 http://example.com/m/
結果サマリー
項目RailsApache
Requests per second63.3579.57
Time per request157.850125.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かなと思う次第です。


4774142239
Apacheポケットリファレンス (POCKET REFERENCE)

関連記事

*1Apacheでもできなくはないですが、外との通信となるためcapybara-webkitを使うなど工夫が必要です

2011-12-15

さいきんのRailsアプリで使ったgem 10個

最近は、運用中Railsアプリの管理画面をTwitter Bootstrapでリニューアルしたり、こまごまと機能追加なんかしたりしてました。そんな中で新たに使ったgemライブラリを簡単にまとめてみます。

Prawn

Haml-rails

erb2haml

Kaminari

  • amatsuda/kaminari - GitHub
    • ページネーション
    • will_paginateよりもなんとなくこちら
    • will_paginateよりもプラガブルかつクリーンな作り(と思う)

SimpleForm

ShowFor

jpmobile

Airbrake

pry-rails

rails_best_practices


Twitter Bootstrap/Haml/SimpleFormなどによる管理画面は、慣れてきたらかなり軽快に開発できた気がします。記述量が少ないおかげで、変更や機能追加にも対応しやすいのがいいと思います。

あと、Airbrakeはおすすめです。


4797363827
Rails3レシピブック 190の技