既存のリポジトリをgithubに追加する
■github上での作業
1.githubの自ページ右上の「Create a new repo」アイコンをクリックして、受け入れ先リポジトリを作成します。
■ローカルのコンソールでの作業
1.↓のコマンドでリモートブランチをgithubに向けます。
git config remote.origin.url git@github.com:ユーザ名/リポジトリ名.git
2.↓のコマンドでpushします。
git push -u origin master
以上です。簡単ですね。
参考ページ:github-に既存のリポジトリを追加する
rails3.0.3でログにタイムスタンプを表示する方法
今私が運用中のアプリの中に、rails3.0.3ベースのものが2つあります。
railsのデフォルトのロガーはなんと日時を表示してくれず、
障害発生時に困ることがしばしばでした。
そこで、ログに日時が表示されるようにカスタマイズしてみました。
rails標準のログ出力と、p出力の両方に対して、日時が表示されるようにしました。
1.p
荒っぽいですが、config/boot.rbに手を入れました。次のコードを追記します。
module Kernel
alias original_p p
def p(str)
original_p("[#{Time.now.to_s(:db)}] #{str}")
end
end
2.railsログ
config/initializersにlog_with_time.rbを追加しました。
module ActiveSupport
class BufferedLogger
def add(severity, message = nil, progname = nil, &block)
return if @level > severity
message = (message || (block && block.call) || progname).to_s
# If a newline is necessary then create a new message ending with a newline.
# Ensures that the original message is not mutated.
message = "[#{Time.now.to_s(:db)}] #{message}\n" unless message[-1] == ?\n
buffer << message
auto_flush
message
end
end
end
rubyはオープンクラスで既存のクラスを編集できるので非常に便利ですね。
rails3のAR(Arel)でIN句を使った条件をAND、ORで連結する方法
rails3のAR(Arel)でIN句を使った条件をAND、ORで連結する方法
AND、ORを使わずにIN句を使うには、
下記のように第二引数で配列を指定すれば良いです。簡単ですね。
scope :magazine, where("type_id in (?)", BookType.has_magazine_code.map{|ele| ele.id })
一方、IN句をANDやORで他の条件と連結するには
women = User.women.where_values.reduce(:and) boys = User.boys.where_values.reduce(:and) User.where(women.or boys).to_sql
のようにします。
(参考:http://qiita.com/ichi_s/items/22f3535c3e8adb901902)
ところが、上の2つを組み合わせた場合、望む結果が得られません。
例えば、
magazine = Book.magazine.where_values.reduce(:and)
novel = Book.novel.where_values.reduce(:and)
Book.where(magazine.or novel).to_sql
とした場合、where句が
where 'type_id IN (1,2)' OR 'type_id IN (3,4,5)'
といった形の不要な文字列化がなされた状態になってしまいます。
これはIN句を使ったscope次のように書き換えることで回避できます。
scope :magazine, where(arel_table[:type_id].in(BookType.has_magazine_code.map{|ele| ele.id }))
sqliteでの文字列結合
'hoge' || 'fuga'
gsubの第二引数(置換後)にマッチ結果を指定する方法
通常 /regexp/ =~ str
でマッチした結果は
$1や$&等で取得可能です。
ところが、stringのgsub(置換メソッド)でマッチ結果を使う場合は
少しやり方が変わります。
str.gsub(/regexp/, '\1')
これで第1マッチ結果を置換後の値として使用できます。
(通常は正規表現としてはこちらが"普通の"記述方法ですね。)
また、引数1つのgsubの場合には次のように通常のマッチ結果取得記述方法が使えます。
str.gsub(/regexp/) {$1}
postgresqlの検索条件に正規表現を使う方法
= の代わりに ~ を使います。
例
where tel ~ '^\d+-\d+-\d+$'
これで電話番号の後ろにキャプション等が付いていないレコードのみ抽出できます。
rvmでバージョンにaliasを付ける
例
rvm alias create hoge ruby-1.9.3-p392
gemのドキュメントをブラウザで見る方法
C:\ruby> gem server
http://localhost:8808/
で閲覧可能