rails

寄り道してたらWikipediaに迷い込む

ちゃんと1行ずつ読もう、分からないところは飛ばさず読もうと思ってRailsのサンプルアプリを読み始めた。1.year.from_nowって意味は自明だけど、実際のところ何だろうか? とか立ち止まりつつ。こういうのってActiveSupportの、確かDurationオブジェクトで。…

xhrの抽象化を眺めていてプログラミングの勉強って何よとか不毛な悩みが浮かんできた

Ruby on Railsで英辞郎CD-ROMをインポートしてオレオレ単語帳が作れるアプリを作ってる。復習間隔を徐々に伸ばすことで記憶定着率を高めるというアプローチのもの。これがいい感じになってきた。でも単語帳アプリって、やっぱりローカルで動かすだけだとイマ…

RailsでTwitter Bootstrapを使う

Twitter BootstarpをRailsで使う場合、Twitter Bootstrap for Rails 3.1 Asset Pipelineというgemが便利。便利なのだけど、CSSやHTMLの生成に使うテンプレート言語のデフォルトが好みじゃない場合にはどうするのがいいのだろうか。具体的にはERB、LESSという…

典型的なMacPortsのある朝

RailsプラグインのPaperclipに1行パッチを書きたい ↓ git pull ↓ パッチ受付ガイドラインを読む ↓ Paperclip全体を眺める ↓ bundle && bundle exex rake ↓ テストで落ちまくる ↓ 奇妙なエラーでやる気をなくす…… ↓ 気を取り直してググる ↓ 実はImageMagickが…

class_evalでDRYにしてみたかったけど

Railsアプリで書いたビューのためのヘルパークラスをしつこくリファクタリング。以下の2つのクラスがDRYじゃない。今後、LinkedInも足すかもしれないし。 class TwitterPhotoUrl < PhotoUrl def path case @options[:size] when :small add_suffix_to_path(@…

stringオブジェクトがクラス名となるクラスを生成する

FacebookやTwitterで異なる写真のURLを一元的に取り扱うために、PhotoUrlクラスを定義して、それをFacebookPhotoUrlやTwitterPhotoUrlに継承するようにしたのはいいけど、結局、ケースごとにインスタンス化するクラスを分けるコードが残って、なんか違うだろ…

デカい条件分岐のリファクタリング

FacebookやTwitterのCDN上にあるアイコン、Paperclipでローカルに置いたユーザーアイコンのimgタグをビューから呼び出して生成するために、Railsのヘルパーメソッドで以下のように書いた。 require 'uri' module ApplicationHelper ICON_SIZE = {small:"24x2…

毒を食らわばSSLまでも

Facebookが9月1日から外部アプリでもSSL通信によるトークン取得を必須とするというので、Rails3+Devise+Omniauthで作りかけのWebアプリでのFacebook対応は見送ろうと思ったけど、やってみるのも経験かなーと、RapidSSLでも買ってみるか考え中。RapidSSLは…

Nginxのバグで201 CreatedのレスポンスでAjaxがホールドする問題

手元のRails3+jQuery-ujsで動いているAjaxリクエストが、サーバにデプロイするとPOST後に延々と時間がかかってレスポンスが返ってこない。POST直後にちゃんとコントローラでrenderされてるのに。良く良く観察してみると、ちょうど1分ほどかかって正常終了す…

cronでrakeが動かない問題

「man 5 crontab」とやれば書いてあるけど、Ubuntu(たぶんDebianも)のcronで、rakeが上手く動かないように見えた問題は、環境変数絡みだった。cronはSHELL、LOGNAME、HOME、PATH、NAMEなどの最低限の環境変数を独自に設定して/bin/shを呼ぶ。cronのPATHに…

Rubyでinvalidなバイト列を含むUTF-8文字列を扱う

Ruby 1.9系ではStringオブジェクトにエンコーディング情報が付加されていて、マルチバイトや複数エンコーディングを扱う日本人としては嬉しい限りだけど、時々エンコーディング関連で例外が発生して落ちすぎるぐらい落ちるように感じるときがある。ちょっと…

Deviseの認証後のリダイレクト

Railsの便利な認証プラグイン「Devise」は、ログイン後に、user_root、rootの順にリダイレクトを試みるけど、これらのnamed routesを、 # redirect when logged-in. namespace :user do root :to => user_show_path(current_user) end のように、ログイン後…

Hash#assert_valid_keys

Railsの画像添付のためのプラグイン「Paperclip」を使った場合に、モデルで以下のように宣言する。 class User < ActiveRecord::Base has_attached_file :avatar, :styles => { :medium => "300x300>", :thumb => "100x100>" } end 何も難しいところはないけ…

ActiveRecordのバリデーションはいつ起こるか

Railsに詳しい人と話していて、ActiveRecordのバリデーションはいつ実行されるかというのを完全に誤解していたというか、基本を理解していなかったことに気づいた。Active Record Validations and Callbacksの説明によれば、create、create!、save、save!、u…

RailsでURLのバリデーション

RailsのActiveRecordでは、バリデーションはデータベースへの書き出し、Model#saveのときに走るので、次のような場合に困る。open-uriを使ってフォームで渡されたURLを開き、このURLにアクセスした情報とフォームから入力された情報を使ってレコードを生成し…

Railsの個別設定情報はどこに書くのか

Amazon S3やBit.lyのAPIを使うのに、ユーザー名やAPIキーをアプリごとに管理する必要がある。こうした情報はどこに書くのが正しいのだろうか。Ryan BatesのawesomenessなRailscastの第85回に、やり方があった。YAMLファイルで用意しておいて、よしなに読み込…

RailsのCSRF対策

Rails3でUnobtrusiveなJavaScriptを使うには、rails.jsをHTMLに含める必要があって、これをレイアウトに書くには、「javascript_include_tag :defaults」を入れておくのが基本。で、これで動いたかなと思ったら、今度は ActionController::InvalidAuthentici…

ObtrusiveだったUnobtrusive JavaScript

DeviseとPaperclipを使ったUserモデルができつつあるのはいいけど、Userをdevise/registrations#destroyしようとしても、どうもアカウントが消せない。標準で、 rails g devise:viewとして吐き出したビューのeditには、 %h3 Cancel my account %p Unhappy? #…

モデル名やメソッド名はサンプル通りが無難

Deviseを使ってみたら「user_signed_in?」とか「current_user」とかの基本的なヘルパーメソッドが全然動いている様子がないので、またあれこれググってしまった。どうもRails3リリースへ向けて動いていたころには、ヘルパーを定義する初期化ファイルの呼び出…

大文字小文字、単数複数にご用心

Rails 2.3で途中まで作ったWebアプリは長期放置モード。ブランチ間違いでごちゃっと壊れた感じがして、それをgitを使いこなして修復するのが面倒だなぁと思っているうちに月日は流れ、そのうち、これはぼくには完成させることはできそうもないという気になっ…

Railsで後からモデルにDeviseを追加

サインアップやログイン認証、忘れたパスワードの再発行なんかをMVCのフルスタックでやってくれるというイケてそうなRailsのプラグイン「Devise」を、すでにだいぶ作ったWebアプリで後からモデルに足そうと思ったら、どこにも既存モデルへの追加方法が書いて…

Railsは楽しい?

Railsを細々と勉強している。Githubにはすごい世界が広がってるなぁという感想と同時に、なんというか全然楽しくないなぁ、やりたいことがなかなかできないなぁというもどかしさも感じる。ライブラリの使い方というのは、細かな動作や作法を試しながら覚える…

Railsあれこれ

Railsであれこれ試している。has_manyとかbelongs_toとかって何が嬉しいんだろうと思ったけど、実際にモデルを作ってみてようやく分かった。どうやってモデルを整理するかって自明じゃないということも何となく分かったような。画像のアップロードとかどうす…

RailsのMapperあたりを読んでみる

「Head First Rails」に続いて、「RailsによるアジャイルWebアプリケーション開発 第3版」をツラツラと読んでみた。ホビープログラマとしては、テストの話あたりが新鮮で面白かった。まずURLのラウティング(ディスパッチ?)処理をやってるActionController::R…

Railsはじめてみる

何となくRuby on Railsを始めてみることにした。オライリーから出た「Head First Rails」という本を読んだら、この本がカタパルト的役割を果たしてくれた気がする。Railsって、すごく面倒なものだという印象を持っていたけど、構造自体はMVCのお手本だし、DR…