ウェブサービスを作っています。

rails

Delayed::Job のリトライ速度を調整する

Delayed::Job では、例外が発生した場合、 5 秒 + リトライ回数 ** 4秒経過した後にリトライしてくれますが、これを変更する方法です。 Delayed::Job のバージョンは、2.1.4 です。 やり方は簡単で、ジョブのクラスに、リトライ時刻を返す reschedule_at メ…

Rails2 と Rails3 で after_filter の実行順序が逆になっている

class FiltersController < ApplicationController before_filter { |c| c.logger.info 'before_A' } before_filter { |c| c.logger.info 'before_B' } before_filter { |c| c.logger.info 'before_C' } after_filter { |c| c.logger.info 'after_A' } after…

MobileAdsense プラグインをリリース

携帯向け AdSense を簡単に設定できる Rails プラグイン MobileAdsense を作りました。 milk1000cc/mobile_adsense · GitHub このプラグインをインストールして、ビューで <%= mobile_adsense :client => 'pub-1234567890' %> のように書くだけで、携帯向け…

nginx + Unicorn を試してみた

追記(2012/02/21 09:39): nginx 設定ファイルの例に、X-Frame-Options, X-Content-Type-Options に関する設定を加筆しました。 追記(2011/10/17 19:18): Rails 3.1 用に、nginx 設定ファイルの例を加筆・修正しました。 追記(2010/09/25 12:07): 現在はさく…

Rails 2.3.8 で DateHelperJa プラグインと RailsXss プラグインの共存

Rails 2.3.8 で DateHelperJa プラグインと RailsXss プラグインを使ったところ、日付選択セレクトボックスの option タグがエスケープされてしまう問題が発生しました。 DateHelperJa プラグインの lib/date_helper_ja.rb 110 行目 (build_select_witp_jp_t…

Pacecar が便利

Pacecar とは 便利な named_scope のモジュール集です。 Paperclip, Shoulda, Factory Girl, Clearance など、素晴らしいライブラリを多数開発されている thoughtbot 製。 class SomeModel < ActiveRecord::Base include Pacecar end だけで、『表示可能で投…

Heroku で Sass を使う

Sass は public/stylesheets に css ファイルが生成され、それが呼び出されるために、Heroku のような read-only ファイルシステムでは public/stylesheets に css ファイルを作成する際、例外が発生してしまいます。 これを解消する Hassle という便利なラ…

role_requirement を導入すると render_optional_error_file がオーバーライドされてしまう

ステータスコード 404 や 500 でも「You don't have access here.」とか出てしまうので、Rails.root/lib/role_requirement_system.rb を修正。 render_optional_error_file オーバーライド部分をコメントアウト # def render_optional_error_file(status) # …

似たようなレイアウトを DRY に記述する

A と B というレイアウトがあって、どちらもほとんど同じレイアウトだけれども、微妙にいろんな箇所が違うという場合にどうするか考えてみました。 まず、骨格となる app/views/layouts/base.html.erb というファイルを作ります。ここには、A・B の共通部分…

role_requirement で、一部のコントローラだけ権限を不要とする

restful_authentication プラグインに権限管理機能を追加する role_requirement というプラグインがあります。 rolerequirement - Clean role-based security for restful_authentication (or acts_as_authenticated) - Google Project Hosting Ruby on Rail…

Nested Attributes の _delete カラムが非推奨になっている

Nested Attributes でデータを削除するためには _delete カラムを使うべきだった気がするのですが、いつの間にか非推奨になっていました。 以下のメッセージが、ログに吐かれます (Rails 2.3.5)。 DEPRECATION WARNING: _delete is deprecated in nested att…

Rails Metal サンプル

params でパラメータ取れるようにしてます。 app/metal/some_metal.rb # Allow the metal piece to run in isolation require(File.dirname(__FILE__) + "/../../config/environment") unless defined?(Rails) class SomeMetal class << self def call(env) …

script/dbconsole -p production が便利

タイトルのままですが、-p オプション付きで dbconsole スクリプトを実行すると、config/database.yml からパスワードを読み込んで DB コンソールを起動してくれます。 -p なし $ script/dbconsole production Enter password: -p あり $ script/dbconsole -…

メモリリークを起こすジョブを DelayedJob で実行する

1 ジョブごとに worker を終了させて god で再度起動させる、あまり良くない方法です。 ジョブ。グローバル変数 $exit を true にすると、job から worker を終了させられます。 class HogeJob def perform .. (leaking process) .. $exit = true end end de…

Delayed Job で、can't dump anonymous class Class というエラーが発生する

Delayed Job とは何か BackgrounDRb 的な何かです。詳しくはググれば、英語のチュートリアル的なものがいろいろ見つけられると思います。 コンストラクタで複雑なことをしているとエラーになる class CrawlJob def initialize @agent = WWW::Mechanize.new e…

GAE で Rails アプリが作りやすくなっています

追記(2009/11/29 19:26): Google App Engine 0.0.5 gem では、この記事通り動かすことができなくなっていますのでご注意ください。 google-appengine という gem のおかげで、簡単になっています。XML 書かなくて済みます。 Rails Primer for Google App Eng…

railswhere が Rails 2.3.3 で動かない件

komagata さんの記事で知って以来、便利に使わせていただいている railswhere というプラグインがあるのですが (timcharper さんの笑顔が素敵)、Rails 2.3.3 にしたら動かなくなってしまいました。 where.and("name LIKE ?", "%#{ name }%") みたいな部分で …

script/generate bumble_model が失敗する

第16回 Google App Engine上でRailsを動かす:Ruby Freaks Lounge|gihyo.jp … 技術評論社 これの通りやってて、 $ script/generate bumble_model Post name owner_id created_at をやろうとしたら /path/to/jruby/lib/ruby/site_ruby/1.8/builtin/javasuppo…

ActsAsDigestedOn プラグインをリリース

近年 255 バイトを超える URL が増加しており、これらをデータベースに格納するため URL のフィールドを TEXT 型にすることがあります。 参考: URLを扱うテーブルを作るときにどうすべきか - 金利0無利息キャッシング – キャッシングできます - subtech しか…

ログにタイムスタンプを追加する

Rails というか ActiveSupport を使っていると、Logger#add などでタイムスタンプが追加されなくなります。 require 'logger' Logger.new(STDOUT).info 'hello' # I, [2009-06-24T11:47:29.977960 #4036] INFO -- : hello require 'rubygems' require 'activ…

api.rubyonrails.org の NestedAttributes の説明が間違ってる気がする

http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html accepts_nested_attributes_for の :allow_destroy の説明で class Member < ActiveRecord::Base has_many :posts accepts_nested_attributes_for :posts, :allow_dest…

WillPaginate で使う params[:page] に文字列が渡されると例外が発生する

ので、config/initializers/rails_ext.rb などに以下を追加。 module WillPaginate module Finder module ClassMethods def wp_parse_options_with_normalize_page(options) page, per_page, total = wp_parse_options_without_normalize_page(options) page…

Paperclip で保存先を動的に指定する

path とか url に proc を渡す。第1引数に Attachment オブジェクトが入ってきます。 has_attached_file(:header_image, :path => proc { |attachment| ":rails_root/public/images/games/#{ attachment.instance.code }/header_image.:extension" }, :url …

ブロック内を表示するヘルパーメソッドの作り方と RSpec によるテストの書き方

こんなの。 <% output_block_with_date do |t| %> 現在の時刻は、<%=h t %> です。 <% end %> ヘルパー。 def output_block_with_date(&blk) concat capture(Time.now, &blk) end concat は、 と同じような意味で、ビューに文字列を出力するメソッドです。 c…

Application Template

git + rspec + i18n な Application Template を gist に置いた。 最近は log, tmp ディレクトリなどがない場合、自動生成してくれるみたい。 gist: 84433 - GitHub 使い方は、 $ rails アプリ名 -m http://gist.github.com/84433.txt

validates_fullwidth_length_of プラグインを公開

全角単位で validates_length_of を実行する Rails プラグイン validates_fullwidth_length_of を GitHub で公開しました。 http://github.com/milk1000cc/validates_fullwidth_length_of/tree/master 詳しくは README をご覧いただきたいのですが、いわゆる…

DateHelperJa っぽいことを、プラグインなしでやる

date_select ヘルパーなどで、 のように表示したい場合、DateHelperJa プラグインが便利だったのですが、Rails2.1 では使えなくなっていました。 そこで Rails 2.1 対応にしてみたりしたのですが、Rails 2.2 にしたら、またしても使えなくなっていました。 …

拡張子付きリクエストのテスト方法

http://example.com/articles.rssのようなリクエストをテストする方法です。 config/routes.rb map.resources :articles app/controllers/articles_controller.rb class ArticlesController < ApplicationController def index respond_to do |format| forma…

フラグメントキャッシュを削除する rake タスク

desc "expire fragments" task :expire_fragments => :environment do RAILS_CACHE.delete_matched /hoge_hoge_cache/ end 文字列かハッシュでキーを指定する場合は、delete_matched の代わりに delete を使います。

Passenger (mod_rails) で、特定のホストからのアクセスを禁止する方法

httpd.conf などに書いて、Apache をリロードします。 <VirtualHost *:80> ServerName www.example.com DocumentRoot /var/www/html/example/public <Location /> Order Allow,Deny Allow from All Deny from (アクセス禁止 IP) </Location> </VirtualHost>Location の代わりに、Directory ディレクティブを使うと pu…