ラベル Rails の投稿を表示しています。 すべての投稿を表示
ラベル Rails の投稿を表示しています。 すべての投稿を表示

2015年8月7日金曜日

Rails runnerの簡単な使い方

RailsのrunnerはRailsの環境の上で任意の処理を書くことができる。 Active Record経由でバッチ処理をするのには最適な機能。
実行の方法は2つある。
  1. Railsで作成したアプリのメソッドを直に指定してやる
  2. ファイルを読み込ませる
紹介されている例は(1)が圧倒的に多く、 lib/配下にTasks::XXXのようなモジュールを作りautoload_pathsを指定してRailsアプリにこのモジュールを読み込ませてやる様な事がされている。 (2)の場合、Webアプリでautoload_pathsやrequireをして処理を記載するファイルを読み込む必要がない。
個人的には、Webアプリと独立したバッチ処理を長々とWebアプリにメソッドとして追加するのは違和感があるので(2)の方が良い気がする。 それに、autoload_pathsを変更しなくていいので簡単。
例:
予めRailsルートはいかにrunner/を作っておく。
mkdir runner
あとは適当なファイルを作って呼び出すだけ。
runner/runner.rb
# Railsでつくったアプリが読み込まれてから実行されるので、何もrequireしなくてもActive Record経由でモデルにアクセスできる
# この場合はTagという名前のモデルが存在する環境
p Tag.count
成功。
$ rails runner runner/runner.rb
21931

2015年5月4日月曜日

RailsのMongoidでMongodbがtimeoutする

Mongodbはデフォルトで10分でカーソルがタイムアウトしてしまう
バッチ処理などの長時間の処理が途中で止まってしまう。

次のように書くと途中で止まってしまう。

Product.each{|product|
    # 何かの長時間かかる処理
}

10分を越える可能性のある処理は次のようにしましょう

Product.no_timeout.each{|product|
    # 何かの長時間かかる処理
}

2015年3月3日火曜日

railsでのHTTP authentication

railsでのHTTP authentication

app/controllers/application_controller.rbに次のようにhttp_basic_authenticate_withを追加すればOK

class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :exception
  http_basic_authenticate_with name: "sato", password: "pass" #これを追加
end

こんな感じでURLでアクセス得きるので便利!

http://sato:pass@localhost:3000/