Hatena::Grouprubyist

うんたらかんたらRuby RSSフィード

2010-02-28viewに検索ボックスを設置する方法

viewに検索ボックスを設置する方法

| viewに検索ボックスを設置する方法 - うんたらかんたらRuby を含むブックマーク はてなブックマーク - viewに検索ボックスを設置する方法 - うんたらかんたらRuby

Railscasts - Simple Search Form


やってみた

view

submit_tag の:name => nil にしておかないと

QueryStringにcommit=Searchが付与されてしまう。

<% form_tag projects_path, :method => 'get' do %>
  <p>
    <%= text_field_tag :search, params[:search] %>
    <%= submit_tag "Search", :name => nil %>
  </p>
<% end %>

model

検索文字列が渡ってきた時だけ条件を付与する検索メソッドを用意。

def self.search(search)
  if search
    find(:all, :conditions => ['name LIKE ?', "%#{search}%"])
  else
    find(:all)
  end
end

controller
def index
  @projects = Project.search(params[:search])
end


よく使うので

オレオレscaffoldに取り入れよう。

トラックバック - http://rubyist.g.hatena.ne.jp/rochefort/20100228

2010-02-27Timeをテキストフィールドで扱う方法

Timeをテキストフィールドで扱う方法

| Timeをテキストフィールドで扱う方法 - うんたらかんたらRuby を含むブックマーク はてなブックマーク - Timeをテキストフィールドで扱う方法 - うんたらかんたらRuby

Railscasts - Time in Text Field

より


書き方

view こんな感じで扱う。

<%= f.text_field :hoge_at_string %>

model ではparse時に発生したエラーをインスタンス変数を用いてハンドリングする。

def hoge_at_string
  due_at.to_s(:db)
end

def hoge_at_string=(due_at_str)
  self.due_at = Time.parse(due_at_str)
rescue ArgumentError
  @due_at_invalid = true
end

def validate
  errors.add(:due_at, "is invalid") if @due_at_invalid
end
トラックバック - http://rubyist.g.hatena.ne.jp/rochefort/20100227

2010-02-25Rubyは業務システムにも十分な適用性を備える らしいよ

Rubyは業務システムにも十分な適用性を備える らしいよ

| Rubyは業務システムにも十分な適用性を備える らしいよ - うんたらかんたらRuby を含むブックマーク はてなブックマーク - Rubyは業務システムにも十分な適用性を備える らしいよ - うんたらかんたらRuby

Rubyは業務システムにも十分な適用性を備える――IPA調査報告書 - SourceForge.JP Magazine

より


ざっくり

「自治体・企業等の情報システムへのRuby適用可能性に関する調査」技術検証報告書

っていうRails2.2の資料がなかなかいい。

ActiveRecordをチューニングして、memcached使うとjavaにも劣んないよっていうことが

書いてあったりします。


あと

passenger / mongrelcpu・メモリ比較やら

passenger使う時は、worker MPMの方が preforkよりメモリ使用量が低い(cpuはあまり差がない)とか


ActiveRecordのチューニングポイント(資料の後ろ)

・include オプションの利用を止め、joins オプションを利用する

select オプションを利用して取得するカラムを制限する

SQL を直接記述し、ActiveRecord による SQL 文の生成をなくす(find_by_sql)


など盛りだくさんです。参考になります。

ipa good job

トラックバック - http://rubyist.g.hatena.ne.jp/rochefort/20100225

2010-02-24Ruby on Rails ステップ・バイ・ステップ - STEP5〜11

Ruby on Rails ステップ・バイ・ステップ - STEP5〜11

| Ruby on Rails ステップ・バイ・ステップ - STEP5〜11 - うんたらかんたらRuby を含むブックマーク はてなブックマーク - Ruby on Rails ステップ・バイ・ステップ - STEP5〜11 - うんたらかんたらRuby



STEP 5: レコードの新規追加 - Ruby on Rails ステップ・バイ・ステップ - Ruby on Rails with OIAX

STEP 6: レコードの編集 - Ruby on Rails ステップ・バイ・ステップ - Ruby on Rails with OIAX

STEP 7: 基本7アクション - Ruby on Rails ステップ・バイ・ステップ - Ruby on Rails with OIAX

STEP 8: 未完了タスクの一覧 - Ruby on Rails ステップ・バイ・ステップ - Ruby on Rails with OIAX

STEP 9: タスクの簡易表示 - Ruby on Rails ステップ・バイ・ステップ - Ruby on Rails with OIAX

STEP 10: finishアクションの実装 - Ruby on Rails ステップ・バイ・ステップ - Ruby on Rails with OIAX

STEP 11: 確認画面(1) - Ruby on Rails ステップ・バイ・ステップ - Ruby on Rails with OIAX


以下メモ

STEP5

<%= link_to '新規タスクの追加', [:new, :task]%>

link_toのオプションに

action、コントローラという渡し方をしている。

ここでは link_to の第2引数に [ :new, :task ] というシンボルの配列を指定しています。このように書くと、/tasks/new というURLパスへのリンクが生成されます。


STEP8

named_scope めちゃ便利

でも名前大事


STEP9

route.rb

"collection" が「集合」を意味するのに対して、"member" は「要素」を意味します。


STEP11

確認画面以降のボタンが無いけど、、、これは今後かな。

トラックバック - http://rubyist.g.hatena.ne.jp/rochefort/20100224

2010-02-23独自の日付フォーマットを設定する方法(nilだとまずい)

独自の日付フォーマットを設定する方法(nilだとまずい)

| 独自の日付フォーマットを設定する方法(nilだとまずい) - うんたらかんたらRuby を含むブックマーク はてなブックマーク - 独自の日付フォーマットを設定する方法(nilだとまずい) - うんたらかんたらRuby

Railscasts - Formatting Time

より

environment.rb

Time::DATE_FORMATS[:hoge] = "hoge on %B %d at %I:%M %p"

viewでこう書ける。

<%= task.hoge_at.to_s(:hoge) %>

こんな感じ

ruby script/console

>> t = Time.now
=> Tue Feb 23 19:28:30 0900 2010
>> t.to_s(:hoge)
=> "hoge on February 23 at 07:28 PM"
>> 
?> t.to_s
=> "Tue Feb 23 19:28:30 +0900 2010"
>> t.to_s(:short)
=> "23 Feb 19:28"
>> t.to_s(:db)
=> "2010-02-23 19:28:30"
>> t.to_s(:time)
=> "19:28"
>> t.to_s(:long)
=> "February 23, 2010 19:28"
>> t.to_s(:rfc822)
=> "Tue, 23 Feb 2010 19:28:30 +0900"

補足

refe Time#strftime

* %A: 曜日の名称(Sunday, Monday ... )

* %a: 曜日の省略名(Sun, Mon ... )

* %B: 月の名称(January, February ... )

* %b: 月の省略名(Jan, Feb ... )

* %c: 日付と時刻

* %d: 日(01-31)

* %H: 24時間制の時(00-23)

* %I: 12時間制の時(01-12)

* %j: 年中の通算日(001-366)

* %M: 分(00-59)

* %m: 月を表す数字(01-12)

* %p: 午前または午後(AM,PM)

* %S: 秒(00-60) (60はうるう秒)

* %U: 週を表す数。最初の日曜日が第1週の始まり(00-53)

* %W: 週を表す数。最初の月曜日が第1週の始まり(00-53)

* %w: 曜日を表す数。日曜日が0(0-6)

* %X: 時刻

* %x: 日付

* %Y: 西暦を表す数

* %y: 西暦の下2桁(00-99)

* %Z: タイムゾーン trap [trap::Time]

* %%: %自身


問題

よりシンプルに日付と時刻の表示書式を整えるには... - ザリガニが見ていた...。

nilだとまずかった。

?> t = nil
=> nil
>> t.to_s(:hoge)
ArgumentError: wrong number of arguments (1 for 0)
        from (irb):5:in `to_s'
        from (irb):5

結局

ヘルパメソッド使うか。

トラックバック - http://rubyist.g.hatena.ne.jp/rochefort/20100223

2010-02-22topcorder sample1

topcorder sample1

| topcorder sample1 - うんたらかんたらRuby を含むブックマーク はてなブックマーク - topcorder sample1 - うんたらかんたらRuby

topcoderの道1|プログラミングに自信があるやつこい!!


問題

与えられた英語の大文字で構成された文字列の中の文字を、

与えられた数字の分だけ左にシフトさせなさい。

たとえば、’C’を2つ左にシフトさせると’A’、’Z’を2つ左にシフトさせると’X’。

与えられる英語の文字列はAからZで、Aの次はZにシフトさせるものとする。

例1)

"VQREQFGT"

2

Returns: "TOPCODER"

例2)

"ABCDEFGHIJKLMNOPQRSTUVWXYZ"

10

Returns: "QRSTUVWXYZABCDEFGHIJKLMNOP"

例3)

"TOPCODER"

0

Returns: "TOPCODER"

例4)

"LIPPSASVPH"

4

"HELLOWORLD"



クラス名: CCipher

メソッド名: decode

メソッドの引数: String , int

リターン: String

メソッド: String decode(String ciphertest, int shift)


やってみた

class CCipher
  ALPHABET_CNT = 26
  def decode(ciphertest, shift)
    ciphertest.each_byte.inject("") do |res,s|
      s += ALPHABET_CNT if s - shift < "A"[0]
      res + (s - shift).chr
    end
  end
end

c = CCipher.new
c.decode("VQREQFGT", 2)
c.decode("ABCDEFGHIJKLMNOPQRSTUVWXYZ", 10)
c.decode("TOPCODER", 0)
c.decode("LIPPSASVPH", 4)

最初は

succとか使えないかなぁと思ったが、

each_byteを使えばいいことに気付いた。

あとは、Aの次をZにするだけ。

>> "A"[0]
=> 65
>> "Z"[0]
=> 90

yyamasakyyamasak2010/02/23 18:42"VQREQFGT".shift(2)

Rubyだと反則ですね。

rochefortrochefort2010/02/23 19:06うぉ、こんな書き方できるんですか!
rvmでも入れて試してみます。

rochefortrochefort2010/03/04 23:02"VQREQFGT".shift(2)
1.9.1で試してみたんですが、これ動きませんでした。
どうやるんでしょうか?

トラックバック - http://rubyist.g.hatena.ne.jp/rochefort/20100222

2010-02-17Ruby on Rails ステップ・バイ・ステップ - STEP2〜4

Ruby on Rails ステップ・バイ・ステップ - STEP2〜4

| Ruby on Rails ステップ・バイ・ステップ - STEP2〜4 - うんたらかんたらRuby を含むブックマーク はてなブックマーク - Ruby on Rails ステップ・バイ・ステップ - STEP2〜4 - うんたらかんたらRuby

STEP 2: レイアウト - Ruby on Rails ステップ・バイ・ステップ - Ruby on Rails with OIAX

STEP 3: レコードの一覧 - Ruby on Rails ステップ・バイ・ステップ - Ruby on Rails with OIAX

STEP 4: レコードの詳細表示と削除 - Ruby on Rails ステップ・バイ・ステップ - Ruby on Rails with OIAX


をやってみた。


以下メモ

STEP2

present?

すっかり忘れてました。

blank?

の反対ですね。


link_to_unless_current

このあたりは、下記で整理されています。

Railsで同じviewを使い回す時に知って得するメソッド4つ - おもしろWEBサービス開発日記


STEP3

fixtureの書き方が新鮮
<% 1.upto(10) do |n| %>
task<%= '%02d' % n %>:
  subject: 件名<%= '%02d' % n %>
  due_date: <%= n.days.since %>
  note: これはメモです。
  done: false
<% end %>

「 '%02d' % n」で頭0埋めで数字を表示している。


STEP4

helperの使い方
  def operations_on_task(task)
    links = []
    links << link_to ('編集', '#')
    links << link_to ('完了', '#')
    links << link_to ('削除', task, :method => :delete, :confirm => '本当に削除しますか?')
    links.join(' | ')
  end

参考になります。

トラックバック - http://rubyist.g.hatena.ne.jp/rochefort/20100217

2010-02-15ハイパー実践講座を読んでみた

ハイパー実践講座を読んでみた

| ハイパー実践講座を読んでみた - うんたらかんたらRuby を含むブックマーク はてなブックマーク - ハイパー実践講座を読んでみた - うんたらかんたらRuby

Railsハイパー実践講座 - 第35回NaCl勉強会 - - I am Cruby!

こういうのをまとめた記事をどこかで出したいです。


是非ともお願いしたいです。詳細聞きたいです。

雑誌でたら買います。


以下メモ

fixtureは使うな

machinistやfactory_girl

画像アップロードのテストがしづらい

→確かにfixture使いにくい。両方試してみます。


mock、stubライブラリを使え

→これも試してみよう。


確認画面でセッションは使うな

→クリアタイミングなど。はまるらしい。


親、子供を一つのアクションで保存する時はauto_saveを使え

→has_many :xxx, :auto_save => true

 valid?の時に子供に対してvalid?が届く

 この際にvalidates_associationは使わないこと


countsizelengthの違いは常に意識して

→理解できました。(count、size、lengthの違い(再考) - うんたらかんたらRuby - Rubyist


accepts_nested_attributes_for使うべし

→あとで調べる。


rvmの勧め

→あとで調べる。


以下、Agree

jsはprototype.js

マスタデータのロードにはseed.rbを使う

プロジェクト専用のscaffold

→オレオレscaffoldですね、分かります。


困ったらrailsのソースコードを 引くこと

http://railsapi.com/doc/rails-v2.3.5/

最近は、ここで調べて実ソースを見るという流れです。


attr_accessible, attr_protectedを忘れずに

→特にid系は。


boolean型の名付け方

→is_xxxは辞めよう、usableみたいなのがいい


gemのバージョンは絶対指定しろ


以下よく分かんないので、雑誌待ち

g,nをデバッグ時に使う

counter_cacheの使い所

子レコード数でソートするとき

それ以外は全く使う必要なんかない

→親の情報表示する際に、子の件数を加えて表示する際にに使用していたんだけど

 実際は、子をロードしている場合が多いので、size(length)で取得すればいいよね

 ってことなんだろうか。

トラックバック - http://rubyist.g.hatena.ne.jp/rochefort/20100215

2010-02-11count、size、lengthの違い(再考)

count、size、lengthの違い(再考)

| count、size、lengthの違い(再考) - うんたらかんたらRuby を含むブックマーク はてなブックマーク - count、size、lengthの違い(再考) - うんたらかんたらRuby

Railsハイパー実践講座 - 第35回NaCl勉強会 - - I am Cruby!

を読んでいて


count, size, length について

DBからロード済であれば配列の件数、なければDBから実際にロードする」

と記載があった。


あれ

count、size、lengthの違い - うんたらかんたらRuby - Rubyist

で書いたように

lengthって、毎回リロードすると思っていた。


そうかロード時と、未ロード時で挙動が違うのか。


一応検証してみた

mysqlでクエリログを掃くように設定し

[mysqld]

#5.1以降はgeneral_logらしい

log=mysqld.log


親子関係のテーブルを用意して確認してみたところ

上記スライドのようになった。


要は

こんなかんじ。

方法ロード済の場合未ロードの場合備考
sizeコレクションの個数SELECT countカウンタキャッシュなど
countSELECT countSELECT count毎回カウント、条件設定可
lengthコレクションの個数SELECT *
(ロードする)
ロードして何かしたい場合

2010-02-10Ruby on Rails ステップ・バイ・ステップ - STEP1

Ruby on Rails ステップ・バイ・ステップ - STEP1

| Ruby on Rails ステップ・バイ・ステップ - STEP1 - うんたらかんたらRuby を含むブックマーク はてなブックマーク - Ruby on Rails ステップ・バイ・ステップ - STEP1 - うんたらかんたらRuby

STEP 1: アプリケーションの作成からトップページの表示まで - Ruby on Rails ステップ・バイ・ステップ - Ruby on Rails with OIAX

をやってみる。


最初なんで

真新しいこともないかと思っていましたが

config/routes.rb 末尾付近の map.connect で始まる2行も消していいのか不安になるかもしれませんが、これはRails 1.x時代の名残なので消して構いません(消すべきです)。

なるほど。知らんかった。

routes.rbはまだ勉強不足なので、後で調べよう。

トラックバック - http://rubyist.g.hatena.ne.jp/rochefort/20100210

2010-02-08rails3.0 betaリリース

rails3.0 betaリリース

| rails3.0 betaリリース - うんたらかんたらRuby を含むブックマーク はてなブックマーク - rails3.0 betaリリース - うんたらかんたらRuby

リリースノート

Rails 3.0: Release Notes


参考

Rails3 リリースノート全文和訳 (ただし適当) - うっかりプログラミング日誌

Rails 3.0 リリースノート和訳 - 前編 - おもしろWEBサービス開発日記


さっそく翻訳や要約してくださっています。

量も多く読むだけでも結構大変なのに、

これは凄く助かります。(ありがとうございます。)


一応原文読みたかったので見たのですが

上記URLのおかげでなんとか最後まで目を通せました。


DataMapperやSequelが使えるようになったり

結構変更点もあるようなです。

↓の話も出ていますね。

i18n その後 - うんたらかんたらRuby - Rubyist

RailsXSSを試してみる - うんたらかんたらRuby - Rubyist



なんとなく

理解が曖昧な部分も多数有るので

今後の動きに注目しながら触っていきたいなと思いました。

あと、実際に開発に当たった人や

リリースノート書いた人も大変だったんだろうなぁと

なんかしみじみ思いました。

トラックバック - http://rubyist.g.hatena.ne.jp/rochefort/20100208

2010-02-07DBに格納したバイナリ画像データを表示させる方法

DBに格納したバイナリ画像を表示させる方法

| DBに格納したバイナリ画像を表示させる方法 - うんたらかんたらRuby を含むブックマーク はてなブックマーク - DBに格納したバイナリ画像を表示させる方法 - うんたらかんたらRuby

最近のDBはミラーリングやレブリケーションが当たり前にされてるので

DBにバイナリで画像格納ってのはよくある方法だと思う。


概要

1.controllerでバイナリデータ以外をselect

2.view側でurl_forによりcontrollerで定義した画像表示actionを指定

3.view側のimage_tagで表示

4.通常のhtmlレンダリング時に、画像表示actionがリクエストされると

controllerのsend_dataでは、id毎にバイナリデータを検索してviewに返す



この流れでは、画像毎にselectが走るが

まぁ、致し方ないか。


controller

selectオプションでバイナリデータ以外の項目を取得。

  def index
    #@images = Image.all
    @images = Image.all(:select => 'id, name, updated_at')
    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @images }
    end
  end
  def get_image
    @image = Image.find(params[:id])
    send_data(@image.image, :disposition => "inline", :type => "image/png")
  end

view

<% @images.each do |image| %>
  <tr>
    <td><%=h image.name %></td>
    <td><%= image_tag(url_for(:action => 'get_image', :id => image.id), :size => '100x100')%></td>
    <td><%= link_to 'Show', image %></td>
    <td><%= link_to 'Edit', edit_image_path(image) %></td>
    <td><%= link_to 'Destroy', image, :confirm => 'Are you sure?', :method => :delete %></td>
  </tr>
<% end %>

こんな感じ

f:id:rochefort:20100207095527p:image

パチパチ


あれ?

生成されたhtmlを見ると

image_tagで通常表示した際に付く、画像のタイムスタンプが無い。

そうか、バイナリだもんな。

これだと、タイムスタンプによるキャッシュが使えない。

なんとかDB更新日時渡せないかな、と↓を思い返しながら思案。

passengerのcss - うんたらかんたらRuby - Rubyist


image_tagをオーバーライドしてやってみた。

view側でaddsrcオプションを指定。

<%= image_tag(url_for(:action => 'get_image', :id => image.id), :size => '100x100', :addsrc => image.updated_at.to_i.to_s) %>

helper

added start から addes endの箇所。

addsrcを追記して、最後に消してみた。

  #override method
  #actionpack-2.3.5/lib/action_view/helpers/asset_tag_helper.rb
  def image_tag(source, options = {})
    options.symbolize_keys!

    options[:src] = path_to_image(source)
    options[:alt] ||= File.basename(options[:src], '.*').split('.').first.to_s.capitalize

    if size = options.delete(:size)
      options[:width], options[:height] = size.split("x") if size =~ %r{^\d+x\d+$}
    end 

    if mouseover = options.delete(:mouseover)
      options[:onmouseover] = "this.src='#{image_path(mouseover)}'"
      options[:onmouseout]  = "this.src='#{image_path(options[:src])}'"
    end 

    # added start
    if options[:addsrc]
      if /\?/ =~ options[:src]
        options[:src] << "#{options[:addsrc]}"
      else
        options[:src] << "?#{options[:addsrc]}"
      end
      options.delete(:addsrc)
    end
    # added end

    tag("img", options)
  end

んで

どうなんでしょう。こういうやり方って。

使用箇所を最小限にするならありなんでしょうか?

file_columnとか使うと幸せになれるんだっけ?


参考

【Rails:6】コントローラとビュー(応用編) - L’Isle joyeuse


2010/03/12追記

DBに入れた画像を表示する - 篳篥日記


viewでurl_forを使って画像呼出しメソッド呼んでたけど

image_tag("/get_image/#{id}", options) みたいに書けるようだ。

これでもいいね。

babiebabie2010/04/20 20:19画像モデルにcreated_at, updated_atを付けておいた上で
1. public/images/hoge/以下に画像ファイルがなかったらDBからバイナリを取って画像を出力する(File.utime()必要)。
2. 画像ファイルがあったらDBからupdated_atだけ引いて比較する。DBの方が新しい場合はファイルを上書きする(File.utime()必要)。
3. 画像ファイルのURLパスを返す。
ってのを実行するimage_path()ってhelperを作るのはどうでしょうか?
これだと、httpdに画像を任せられて速いし、DBに負荷が余りかからないし、分散環境でも問題ないです。

rochefortrochefort2010/04/20 22:32コメントありがとうございます!
なるほど。DBにはマスタデータを格納し、WEBサーバ毎にディスクに画像持たせるという方式ですね。

ディスクIOが気にならない程度なら、それもよさそうですね。
でもディスクの画像を使用するのが前提なら、共有ディスクに置いたりするってのもよさそうですね。
disk_cache、memcachedなどキャッシュ使用を視野に入れるとさらに面白そうです。
いずれにせよ、実際に使う局面でベンチマークとってみたいところです(まだサービスインできそうなアイデアがない。。。早く纏めたいな。)。

babiebabie2010/04/21 07:40上のはアイデアだけで実行してないのですが、フロントにSquidをかませて画像ファイルをリバースプロキシでキャッシュさせたことがあります。メモリの潤沢なサーバを1台用意できたのでなかなか速かったですよ。

rochefortrochefort2010/04/21 22:00ああ、Squidですか。いいらしいですね。興味あります。
是非使ってみたいとは思ってますが、リバースプロキシが必要な状況(スケールさせる)っていうのがなかなか。

トラックバック - http://rubyist.g.hatena.ne.jp/rochefort/20100207

2010-02-06rils2.3から明示的なsession offは不要

rails2.3から明示的なsession offは不要

| rails2.3から明示的なsession offは不要 - うんたらかんたらRuby を含むブックマーク はてなブックマーク - rails2.3から明示的なsession offは不要 - うんたらかんたらRuby

session機能を使わない小さいaplを作ってて

オフするのどうやるんだろうと調べてたら

どうやら、2.3では遅延ロードするってことに

なってたらしい。

(うぇぶたま さんの和訳が見れなかったので原文を見てみた)


Ruby on Rails 2.3 Release Notes

5.5 Rack-based Lazy-loaded Sessions

A big change pushed the underpinnings of Action Controller session storage down to the Rack level. This involved a good deal of work in the code, though it should be completely transparent to your Rails applications (as a bonus, some icky patches around the old CGI session handler got removed). It’s still significant, though, for one simple reason: non-Rails Rack applications have access to the same session storage handlers (and therefore the same session) as your Rails applications. In addition, sessions are now lazy-loaded (in line with the loading improvements to the rest of the framework). This means that you no longer need to explicitly disable sessions if you don’t want them; just don’t refer to them and they won’t load.



要は

rackレベルでsession管理するようになったらしく

不要なときに、明示的にoffしなくてもよくなったってことらしい。

なるほどなるほど。


最後の文

This means that you no longer need to explicitly disable sessions if you don’t want them; just don’t refer to them and they won’t load.
トラックバック - http://rubyist.g.hatena.ne.jp/rochefort/20100206

2010-02-04db:rollback

db:rollback

| db:rollback - うんたらかんたらRuby を含むブックマーク はてなブックマーク - db:rollback - うんたらかんたらRuby

参考

マイグレーション関連のRakeタスクの再確認 - ひげろぐ

http://brass.to/blog/rails_migration_rake_task.html


db:rollback便利

migrate時にindexとかalter tableとか追加したはいいが

downでtypoとかしてたりして

2つ前に戻そうと思ったら途中でこけて

結局手作業でdropしたりして、あれ、今どこまでmigrate適用できてんだっけ

うおぉぉぉ、migrate嫌い。とか思ってたんだけど。


db:rollback

知らんかった。オプション無しなら1つ戻すと。


migrationファイルに手を入れた時は

これやっときゃ、簡単に確認できる。

1個戻して再実行してくれる

rake db:migrate:redo

も便利。

あと、未適用のマイグレーションを表示してくれる

db:abort_if_pending_migrations

も。



戻す時もmigratiionファイル名やschema_migrationsテーブル見て

バージョン調べて

rake db:migrate:down VERSION=yyyymmddhhmiss

実行。

みたいなことやってました。

う〜ん。無駄だったなぁ。

ドキュメント読んでないのが悪いんだけど、

rake -Tぐらいしっかり読んでおけばよかった。

トラックバック - http://rubyist.g.hatena.ne.jp/rochefort/20100204

2010-02-02rubyのワンライナー

rubyのワンライナー

| rubyのワンライナー - うんたらかんたらRuby を含むブックマーク はてなブックマーク - rubyのワンライナー - うんたらかんたらRuby

Ruby Freaks Lounge:第10回 Windows版Ruby 1.9で培う危機回避スキル(後編)|gihyo.jp … 技術評論社


を見て以来、最近、無理してrubyのワンライナーを使うようにしている。

(素振り素振り)


とりあえず、httpd.confのコメント抜き。

ruby -n -e 'print if (/^#/ !~ $_.strip) and ($_.strip != "")' httpd.conf

pオプションとnオプションは便利だなぁ。

トラックバック - http://rubyist.g.hatena.ne.jp/rochefort/20100202