Archive for 6月, 2011

Padrino – activerecord のバージョンがなぜか 1.6.0 になってしまう件の対処

Time to Read

1分

表記のとおり、最近の Padrino framework で、 activerecord 利用のプロジェクトを作ろうとしたとき、

1
2
3
4
5
6
7
8
9
10
11
$ padrino g project foobarpj -d activerecord -b
      create  
      create  .gitignore
      create  config.ru
...
         run  bundle install from "."
Fetching source index for http://rubygems.org/
Installing rake (0.9.2) 
Installing activerecord (1.6.0) 
Using activesupport (3.0.9) 
...

ってなるので、「えっ」って感じだと思います。

公式のチケットにもコメントしといたんですが、以下の現象が見られます。

  • activemodel 3.0.9 と、 i18n 0.6.0 がなぜか一緒に使えない
  • bundler は、(たぶん padrino 自身も使っているためだろうけど) i18n のバージョンを可能な限り新しいものにしようとする
  • 結果、 activemodel が入らず、 activemodel に依存していないバージョンの activerecord 1.6.0 が入る?

以下の方法で解決できますので、お試しください。

  • Gemfile に、 gem 'i18n', '0.5.0' を追記して bundle update する
  • gem 'activerecord', '3.0.5' にしとく(このバージョンはなぜか i18n 0.6.0 と一緒に入る。でも、あやしい)
  • 思い切って gem 'activerecord', '~>3.1.0.rc2' にする。このバージョン以降は i18n 0.6.0 に正しく対応している。

ということで、gituhbでのコミットログを見た感じでも、 activemodel 3.1.0 リリースの暁には解決される問題のはずですので、しばらくは上述の方法で対処してください(つーか、 Padrino の問題じゃないですね、これ……)。ではでは。


追記@07/11

最近リリースされた Padrino 0.10.0 においては、 i18n のバージョンは一旦 0.5.0 が入るようになっており、したがって activemodel 3.0.9 などとコンフリクトしません。

Enjoy!!!

 

Gyazo の upload.cgi を Sinatra で実装したりした(Heroku にデプロイもできるよ!)

Time to Read

2分

皆さんご存知の便利画像アップロードサービス、 Gyazo 、そのサーバ側実装 upload.cgi を、クローンして再実装してみた。

プロジェクト名は冗談で、中身は Sinatra で実装されています。さらに、画像保存にファイルではなく MongoDB(Mongoid gem) を利用しているので、 heroku その他クラウド上にデプロイできるというおまけ付きです。

Read the rest of this entry »

 

[Ruby1.9以上]インクリメントしながらの無限ループ

Time to Read

10秒

1.8 以前でもできる普通のやり方:

1
2
3
4
5
i ||= 0
loop do
  puts i
  i += 1
end

Read the rest of this entry »

 

東京varnish勉強会(Tokyo.vcl)まとめ

Time to Read

1分

ざっくり、雰囲気と僕が興味を持った部分だけまとめています…。

Read the rest of this entry »

 

Ruby de Hanoi’s Tower

Time to Read

1分

ハノイの塔も解けないプログラマなんて……、って言われたので解いてみた。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
require 'logger'
class Hanoi
  def initialize(size=3, options={})
    @logger = Logger.new(STDOUT)
    @options = options
    @bars = {
      :a => [],
      :b => [],
      :c => []
    }
    @size = size.to_i
    @step = 0
 
    if @size < 2
      @bars[:a] += [1]
    else
      @bars[:a] += (1..@size).to_a.reverse
    end
 
    logger.info "A tower has #{@size} disk(s)"
  end
  attr_reader :logger
  private :logger
 
  def hanoi_move(bar1, bar2, size=@size)
    if size < 2
      hanoi_move_one_disc(bar1, bar2, size)
    else
      left = (@bars.keys - [bar1, bar2]).first
      hanoi_move(bar1, left, size - 1) 
      hanoi_move_one_disc(bar1, bar2, size)
      hanoi_move(left, bar2, size - 1)
    end
  end
 
  def hanoi_move_one_disc(bar1, bar2, size)
    @bars[bar2].push(@bars[bar1].pop) 
    logger.info "Disk #{size} is moved to #{bar1.to_s.upcase} to #{bar2.to_s.upcase}"
    if @options[:verbose]
      require 'pp'
      logger.debug @bars.pretty_inspect.chomp
    end
    @step += 1
  end
 
  def finalize
    logger.info "Moved with: #{@step} step(s)"
  end
 
  def self.to_hanoi(size=3, options={})
    hanoi = new(size, options)
    hanoi.hanoi_move(:a, :c)
    hanoi.finalize
  end
end
irb(main):041:0> Hanoi.to_hanoi(4)
I, [2011-06-13T11:22:46.154585 #26427]  INFO -- : A tower has 4 disk(s)
I, [2011-06-13T11:22:46.154799 #26427]  INFO -- : Disk 1 is moved to A to B
I, [2011-06-13T11:22:46.154902 #26427]  INFO -- : Disk 2 is moved to A to C
I, [2011-06-13T11:22:46.154975 #26427]  INFO -- : Disk 1 is moved to B to C
I, [2011-06-13T11:22:46.155037 #26427]  INFO -- : Disk 3 is moved to A to B
I, [2011-06-13T11:22:46.155129 #26427]  INFO -- : Disk 1 is moved to C to A
I, [2011-06-13T11:22:46.155201 #26427]  INFO -- : Disk 2 is moved to C to B
I, [2011-06-13T11:22:46.155292 #26427]  INFO -- : Disk 1 is moved to A to B
I, [2011-06-13T11:22:46.155391 #26427]  INFO -- : Disk 4 is moved to A to C
I, [2011-06-13T11:22:46.155475 #26427]  INFO -- : Disk 1 is moved to B to C
I, [2011-06-13T11:22:46.155538 #26427]  INFO -- : Disk 2 is moved to B to A
I, [2011-06-13T11:22:46.155604 #26427]  INFO -- : Disk 1 is moved to C to A
I, [2011-06-13T11:22:46.155695 #26427]  INFO -- : Disk 3 is moved to B to C
I, [2011-06-13T11:22:46.155805 #26427]  INFO -- : Disk 1 is moved to A to B
I, [2011-06-13T11:22:46.155902 #26427]  INFO -- : Disk 2 is moved to A to C
I, [2011-06-13T11:22:46.156005 #26427]  INFO -- : Disk 1 is moved to B to C
I, [2011-06-13T11:22:46.156100 #26427]  INFO -- : Moved with: 15 step(s)
=> true

see also