Seems there’s a problem with the Rails generator. I was receiving an odd (pun intended) error:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ ruby script\generate migration -tc AddGamesAndCategories1
odd number of arguments for Hash
  ./script/../config/../vendor/rails/railties/lib/rails_generator/scripts/../options.rb:130:in `[]'
  ./script/../config/../vendor/rails/railties/lib/rails_generator/scripts/../options.rb:130:in `add_general_options!'
  ./script/../config/../vendor/rails/railties/lib/rails_generator/scripts/../options.rb:130:in `call'
  C:/ruby/lib/ruby/1.8/optparse.rb:1308:in `order!'
  C:/ruby/lib/ruby/1.8/optparse.rb:1266:in `catch'
  C:/ruby/lib/ruby/1.8/optparse.rb:1266:in `order!'
  C:/ruby/lib/ruby/1.8/optparse.rb:1346:in `permute!'
  C:/ruby/lib/ruby/1.8/optparse.rb:1373:in `parse!'
  ./script/../config/../vendor/rails/railties/lib/rails_generator/scripts/../options.rb:89:in `parse!'
  ./script/../config/../vendor/rails/railties/lib/rails_generator/scripts/../options.rb:85:in `initialize'
  ./script/../config/../vendor/rails/railties/lib/rails_generator/scripts/../options.rb:85:in `new'
  ./script/../config/../vendor/rails/railties/lib/rails_generator/scripts/../options.rb:85:in `parse!'
  ./script/../config/../vendor/rails/railties/lib/rails_generator/scripts/../scripts.rb:19:in `run'
  ./script/../config/../vendor/rails/railties/lib/commands/generate.rb:6
  C:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:21:in `require__'
  C:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:21:in `require'
  script/generate:3
After a bit of debugging, it turned out that there’s a small problem with the Rails::Generator::Options::ClassMethods#add_general_options! method.
1
2
3
4
5
6
opt.on('-c', '--svn',
  'Modify files with subversion. (Note: svn must be in path)') {
  options[:svn] =
    Hash[*`svn status`.collect { |e|
      e.chop.split.reverse unless
        e.chop.split.size != 2 }.flatten] }
(reformatted for visibility)

This line will return nil, unless the line splits in two (A app/models/test.rb). The problem is that if the number of lines that don’t split in two is odd, then the flattened array will contain an odd number of items, which will cause Hash.new to fail.

The solution ? compact the array before flattening. I already submitted ticket #2814 with a patch.

In the meantime, I’m running a patched copy of Rails.

UPDATE: revision 2972 applied a modified version of my original patch.

 

Search

A picture of me

I am François Beausoleil, a Ruby on Rails coder. During the day, I work on XLsuite. At night, I am interested many things. Read my biography

Tags

(3) (1) (0) (2) (1) (1) (2) (2) (1) (2) (1) (2) (1) (2) (1) (1) (1) (1) (2) (14) (1) (1) (1) (1) (2) (1) (1) (2) (0) (1) (2) (1) (3) (1) (1) (1) (1) (1) (1) (0) (3) (2) (1) (2) (2) (1) (3) (2) (8) (8) (9) (12) (1) (1) (3) (1) (1) (1) (1) (1) (1) (2) (2) (2) (1) (1) (3) (1) (3) (1) (0) (23) (1) (1) (0) (1) (1) (1) (23) (25) (1) (1) (13) (1) (1) (2) (3) (1) (1) (4) (1) (2) (3) (0) (1) (7) (3) (1) (5) (5) (2) (2) (2) (4) (6) (7) (1) (0) (1) (1) (2) (2) (1) (4) (12) (2) (1) (2) (4) (1) (1) (1) (2) (8) (2) (3) (2) (2) (1) (3) (1) (1)

Links

Projects I work on

Categories

Archives