2007-01-01から1年間の記事一覧

Rubyでの正規表現についての覚書

Rubyで正規表現オブジェクトを作る方法は以下の三通り。 /pattern/option %r{pattern}option Regexp.new('pattern', option) 通常扱うのは/pattern/option。所謂正規表現リテラルで、リテラル内には式展開を含める事ができる。 /hoge#{"foo"}/ # => /hogefoo…

csvからのインポート

こんな感じ。 LOAD DATA LOCAL INFILE "/home/data/sample.csv" REPLACE INTO TABLE csv FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n'; 構文はMySQL公式のドキュメントが分かりやすい。 参考 MySQL :: MySQL 5.6 リファレンスマニ…

インストールモジュールを確認する

bin/httpd -M 2>&1 | sort actions_module (static) alias_module (static) asis_module (static) auth_basic_module (static) authn_default_module (static) authn_file_module (static) authz_default_module (static) authz_groupfile_module (static) a…

adv_attr_accessorの実装から感じるRailsの哲学

ActionMailerのソースを読んでいたら、 adv_attr_accessor :bcc と言うコードが合ったので、このadv_attr_accessorという謎のメソッドを調べてみた。 短かいコードだったので全文引用してしまう。 module ActionMailer module AdvAttrAccessor #:nodoc: def …

BackgrounDRbのWorkerオブジェクト削除タイミングについての悩み

BackgrounDRbのサンプルでよく見かけるのが以下のようなソース。 def start_background_task session[:KEY] = MiddleMan.new_worker(:class => :foo_worker, :args => "hoge") end #start_background_task.rhtmlから非同期で呼ばれるアクション def update_p…

Ctrl + Cで終了しないRubyプログラム

バッチ用のRubyプログラムをちょっと動かしてからCtrl + Cで終了させたものの、止まってくれなくて焦る。標準出力にガンガン出力されていく…。 kill -s 9 で強制的にKillするが、そもそもCtrl + Cで止まらないことが問題。 ちょっと考えてみたところ、原因は…

プレースホルダを遅延評価する

最近便利に使っているのがプレースホルダ(%s)を遅延評価させること。 要は動的な定数(?)を定義する事が出来る。 ソースを見た方が早いと思うのでさくっと。 SEARCH_URL = 'http://www.google.co.jp/search?q=%s' %w(ruby perl php).each{|word| puts SEAR…

Apache(mod_proxy_balancer) + mongrelで運用するときの注意点

Railsをproduction環境で運用していると、こんなエラーが頻発していることに気が付いた。 Processing ApplicationController#index (for ::1 at 2007-08-07 15:51:09) [GET] Session ID: 006a27e09f46dfe1bd6f6cc2258cfa8e Parameters: {} ActionController:…

MySQLリンク集

こつこつと貯めていたMySQLのリンク集を公開。 SBMでも良いんだけど、ある程度溜まってくるとページングで件数が区切られちゃって不便だし、こうやって並べることも出来ないから本気で情報収集したい場合は結局テキストでまとめちゃう…。 タグでエクスポート…

セッタが未定義もしくはprivateなインスタンス変数の内容をクラスの外部から取得する

追記 エントリ本文の内容は間違い。 instance_variable_getメソッドの引数にはシンボルだが、変数名のみではなく@を含む必要があった。 puts c.instance_variable_get(:write_only) rescue puts $!.message #=>`instance_variable_get': `write_only' is not…

正規表現オブジェクトの作り方と注意点

Rubyで正規表現オブジェクトを作る方法は以下の三通り。 /pattern/option %r{pattern}option Regexp.new('pattern', option) 一番利用頻度が高いのが/pattern/で、この場合patternには式展開を含める事ができる。 /hoge#{"foo"}/ # => /hogefoo/ ただし、opt…

AR#==

ActiveRecordの==はどう動くのか気になったので調べてみた。 例えばSNSで日記にユーザからコメントがついた場合、新着に表示する時にはまず日記を書いたユーザとコメントを書いたユーザが別かどうかを判定しなきゃいけない。 早速ソースを読む。 def ==(comp…

HTTP POST ≒ request.post?

例えば以下のようにlink_toメソッドを呼び出してリンクを作成すると、HTTP的にはPOST扱いとなる。 link_to("削除", {}, :confirm => "削除する?", :delete) HTTPリクエストは以下のように発行される。 POST / HTTP/1.1 (中略) _method=deleteで、このリクエ…

Developmentモードのログを日毎にローテートする

RubyのLoggerは簡易的ながらもローテーションする事ができるのでそれを使えば簡単にローテーションを実現できる。 config/environments/development.rbに以下を追記すると日毎にローテーションするようになる。 config.logger = Logger.new(config.log_path,…

ActiveSupportに年月表示用のメソッドを追加する方法

以下をenvironment.rbに追加する。 ActiveSupport::CoreExtensions::Time::Conversions.class_eval do def to_yymm strftime("%y/%m") end end MySQLの場合はDateTime型がRubyのTime型にマッピングされるからTime型を拡張している。 YYMM形式で表示したいシ…

date_selectヘルパーの注意点

date_selectヘルパーは引数で渡したインスタンス名とメソッド名から年月日の選択状態を自動的に判断してくれて便利なのだけれど、インスタンスがローカル変数だと値を読み取ってくれず、常に最新の日付になってしまうと言う問題がある。 date_select(object_…

ちょっと便利なObject#blank?メソッド

ActiveSupportの拡張。 Stringでnilもしくは空文字列を判断する制御文がシンプルになる。 #before if str && !(str.empty?) #after unless str.blank? 実装はこちらを。 http://dev.rubyonrails.org/browser/trunk/activesupport/lib/active_support/core_ex…

ActiveHeartはどのようにカラム名の日本語化を実現しているか

Base.set_field_namesメソッドでは定義したカラム名と日本語名の対照用ハッシュ(@field_names)を作成する。 そして、ActiveRecord::Base#human_attribute_name(column_name)と言うメソッドをaliasにより独自メソッドに置き換え、引数のカラム名が@field_name…

Railsではアクション内にConst変数を宣言することができない?

以下のようなコードをアクションに書いたらシンタックスエラーになってしまった。 Item = Struct.new("Item", :value, :name) case type when 'select' item.new(0, "選択して下さい") when 'search' item.new(0, "すべて") else item.new(0, "すべて") end …

ARのWhere句を構築してくれるEz-Where pluginの次期版が良さげ

ARではWhere句を構築するのに結構手間がかかるので、いくつかpluginが公開されている。 http://d.hatena.ne.jp/yukiwata/20070524/1179977530 とは言うものの、どれも機能的には貧弱に見えたのでこれだったら我慢して直で書いちゃおうかな、と思っていたらez…

IEでも動作を確認(RDoc をインクリメンタルサーチする greasemonkey スクリプト - 2nd life)

Trixieに突っ込んでIEでRDoc開いてみたら普通に動いた。素敵。 ただ、何故かは分からないけどIEだとARのRDocが開けない…。XMLパースエラーとか出ちゃう。 全文検索もあることだし、Railsに限ればHTMLHelp(Rails の htmlhelp - 2nd life)の方が個人的には便…

共同開発のコツ

やっていることもあればやっていないこともあり。 時間ができたら読み直して、吸収できるところは吸収していこう。 SBMだと後で読まない事に気づき始めた今日この頃。http://labs.unoh.net/2006/08/post_38.html http://labs.unoh.net/2006/08/trac_qatestin…

Tracインストール成功 & カスタマイズ

Apache2.0.59 + mod_python + 基本認証で動いた。Apache2系+FastCGIはRailsで懲りているので動かす気は起きない。 これだけでもアクセス権限で躓いたりと、結構な時間を食ってしまった。 mod_pythonでTracを動かすhttpd.confの内容。最後にコピペすればOK。 …

実行後に謎の警告

Tracのソース内で使っているC APIのバージョンがPython2.5のC APIと違うって事で警告が初めに出る。 一応動いているので問題はないと思うんだけど、気になるから覚書。 /usr/local/lib/python2.5/site-packages/libsvn/fs.py:5: RuntimeWarning: Python C AP…

RHEL4にApache 2.2.4インストール

躓いたのは以下の2点。 どちらもWindows版では起こらない事だと思う。 ./configureでエラー。 すべてのリクエストが403 Forbiddenとなる 前者は http://www.tymy.net/~matsu/nucleus/item-1001.html を参照。 configureのオプションに with-included-apr を…

RHEL4にTracインストール

yumやapt-getなし。全部手動で入れる。躓いたところは以下の二点(最終的にはまだあった)。 sqliteのインストールディレクトリを変える(ex:home/hoge/sqlite)とpysqliteのコンパイルが通らない trac-admin test initenvでエラーが起こる。 前者は/usr/local…

Rubyでは制御文までオブジェクトです。

print( "#{ if true "hoge" else "foo" end} bar" ) #=> hoge bar おお、これは凄い。 若干キモ臭も漂うものの、やっぱりRubyは素敵。 参考 http://ruby.mirror.easynet.be/ja/column/v0004.html

Apacheでインストールされているモジュールを確認する

httpd -l とすると以下のような実行結果が返る。 ./bin/httpd -l Compiled in modules: core.c mod_authn_file.c mod_authn_default.c mod_authz_host.c mod_authz_groupfile.c mod_authz_user.c mod_authz_default.c mod_auth_basic.c mod_include.c mod_fi…

file_columnプラグインでお手軽アップローダ作成

インストール 適当な名前でRailsアプリ作成 ruby script/plugin install http://opensvn.csie.org/rails_file_column/plugins/file_column/trunk ディレクトリがtrunkで掘られるのでfile_columnにリネーム 動作確認 コントローラとアクション、モデルとか一…

RMagickをWindows環境にインストール

Rubyで画像処理がしたくなったのでRMagickをインストール。 Windowsでも動いた。 インストール http://rubyforge.org/projects/rmagickからrmagick-win32をダウンロード。 アーカイブを解凍後、ImageMagick-6.3.0-7-Q8-windows-dll.exeを実行。インストール…