While installing ruby from ports (currently 1.8.5) on my OpenBSD 4.1 boxes, I will always get an error as follows:
.... failed to allocate memory (NoMemoryError)
So, I tried to install ruby 1.8.6 and rubygems 0.9.4 from source tarballs instead and it can be done successfully w/o errors. But after that, another error showed when i tried to install rails:
Bulk updating Gem source index for: http://gems.rubyforge.org
/usr/local/lib/ruby/1.8/yaml.rb:133: [BUG] Segmentation fault
ruby 1.8.6 (2007-03-13) [i386-openbsd4.1]Abort
After some googling around, I found this solution and it works for me.
You have to modify the file /usr/local/lib/ruby/site_ruby/1.8/rubygems/sources_index.rb, replace the convert_specs method with the following one:
def convert_specs(yaml_spec)
specs = Cache.newnl = 0
yaml_spec.each do |line|
nl += 1
endnotify_percent = 15
nl_till_rollover = nl_for_x_percent = nl / notify_percent
p = 0.0state = :scan
gem_yaml = ''
yaml_spec += "\n DONE" # so that the last gem is addedyaml_spec.each do |line|
if nl_till_rollover == 0 && nl > 100000
p += 100.0 / notify_percent
nl_till_rollover = nl_for_x_percent
puts "#{p.to_i}%"
end
nl_till_rollover -= 1if state == :scan && line =~ /^ \S/
gem_yaml = line
state = :copy
elsif state == :copy && line =~ /^ \S/
spec = YAML.load(gem_yaml).values[0]
specs.add_spec spec
# keep going
gem_yaml = line
elsif state == :copy
gem_yaml += line
end
endspecs
end
Then, you can run "gem i rails -y" again, but it will show:
Bulk updating Gem source index for: http://gems.rubyforge.org
6%
13%
20%
26%
33%
40%
46%
53%
59%
66%
73%
80%
86%
93%
100%
ERROR: While executing gem ... (Gem::GemNotFoundException)
Could not find rails (> 0) in any repository
That's alright, just run AGAIN and it will be done successfully. (I don't know why I have to run it twice....)