tryプログラミング、リモートワーク、田舎暮らし、音楽、etc.2012-03-23Rails3.0から3.1への移行とRSS(Atom)フィードの取得Rubyはじめに妻がやってるパン屋さんのWebサイトを変更してみました。変更と言っても、トップページにRSS経由で最新のブログ記事へのリンクを表示する、ただそれだけの変更です。妻は週に1〜2回ブログを更新しますが、店のサイトの方は最近放置状態なので、ちょっとでもサイトに変化を与えようと思い、この改造に着手しました。特別珍しいことをやるわけでもないし、こんなん楽勝、楽勝!!・・・と思ってたら、予想以上に時間がかかってしまいました。T)トータル5〜6時間ぐらい??終わってみたら「なんだこれだけかいっ!」って思うんですが、その解決策に至るまでの道のりは非常に険しかったです。ま、簡単にいうと「ハマってた」ということなんですが。するとどこかの誰かの役に立つかもしれないので、技術メモを残しておきます。最初にGoogleで見かけたサンプルはjQueryを使ってRSSフィードを取得していました。Rails3.0はprototype.jsで、3.1からjQueryがデフォルトになったようなので、この際3.1に移行しようと思いました。(この選択で後で大きく困らされたのですが・・・)GemfileまずはGemfileを変更します。install(updateだったかも)」で、移行終了〜!!・・・というわけにはいきません。sqliteのバージョンを1.3.3に固定していたのですが、ダメみたいなのでバージョンを「1.3.0以上」に変更します。1.3.0'debug_rjsAjax周りの仕様が変更されたため、config/environments/development.rbに以下の一行があるとエラーになります。ModelWebサイトには問い合わせフォームがあります。単純なフォームなのでRailsの便利なバリデータを使いたいのですが、送信情報自体はデータベースに格納しません。データベーステーブルに依存しないモデルを作成しました。Rails3.0では以下のようなコードで動いていたのですが、3.1になると「ActiveRecord::ConnectionNotEstablished」というエラーが出ました。:textendこれはあれこれ探しまくって、結局以下のような形に落ち着きました。OutputSafetyHelper問い合わせフォームで入力値エラーがあった際にdivタグではなくspanタグでエラーメッセージを出力したかったので、config/application.rbに以下のようなおまじないを埋め込んでいたのですが、「rawメソッドが見つからない」と怒られてこれも動かなくなりました。class="field_with_errors">#{html_tag}</span>)endどうやらRawOutputHelperというクラスがなくなったようなので、「ActionView::Helpers::OutputSafetyHelper」という新しいクラスに変更しています。ActionView::Helpers::OutputSafetyHelperここまでやってようやくローカルでRails3.1が動作するようになりました。最初はjQueryでやろうと思っていたのですが、ネットのサンプルコードがうまく動かなかったので結局サーバーサイドで実装することにしました。いうことで無理に3.1にしなくても良かった!ということになるんですが・・・。T)それはさておき、あれこれ説明するより、コードを見た方が速いです。こんなヘルパーメソッドを作って、Viewで呼び出すようにしました。endendそうそう、feed-normalizerも忘れずにインストールしておきましょう。'feed-normalizer'ところで、最初はこのサイト(RubyRSS)に載ってる方法を試していたんですが、parseしてもnilが返ってきてしまい、動きませんでした。RSSとAtomは別物のようで、Atom用のコードを書く必要があるようです。ASCII-8BIT」というエラーが出たため、「feed.title.force_encoding('utf-8')」のようにエンコードを指定する必要がありました。Herokuへのデプロイさあ、ようやくローカルでちゃんと動いた!あとはデプロイしたらおしまい〜!!・・・と思ったら、まだ罠がありました。Herokuにデプロイするとエラーが発生します。ログを見ると、またまた「ActiveRecord::ConnectionNotEstablished」とありました。ググってみると、config/application.rbで読み込むモジュールを個別に指定する必要があるとのことでした。今度こそOK〜!!・・・と思ったら、今度はブログの更新日がなんか違う。タイムゾーンがズレているようです。こちらの記事を参考にして、Herokuのタイムゾーンを設定しました。TZ=Asia/Tokyoタイムゾーンを変更しないやり方もあるみたいですが、僕は安易に手っ取り早い解決策を選択しました。最新ブログ表示機能の完成です!実際のページはこちらになります。バゲットたったコレだけのために5〜6時間とは・・・悲しいです。Railsに限らず、初めて挑戦することは簡単そうに見えても結構泣かされますもんね。仕方がない、きっと!!と、自分で自分を励ましておきます。Railsは3.2が出ていますが、僕と同じように3.0から3.1に移行しようと思っている人は参考にしてみてください。try僕から見たお店の様子を紹介しています。try最初にWebサイトを作った時の技術情報を載せています。変更はググっても明確な情報源がなかったので英語ブログに載せてみました。はてなブログPro株式会社ソニックガーデンで働くRubyプログラマ。2017年11月に「プロを目指す人のためのRuby入門」を出版。blog)はてなブログをはじめよう!JunichiItoさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。