Wednesday, March 10, 2010

gem 1.3.6, Ruby 1.9 and FreeBSD

Кстати о rubygems. Для несчастных владельцев gem'ов, кои требуется тихо класть на rubygems.org, версия gem, которая идет в комплекте с ruby 1.9.1 лишена команды push. А без нее

% gem push pkg/глюкало-0.1.3.gem

не скажешь. Чтобы эта счастье там появилось, требуется обновить rubygems командочкой gem update --system. Это все не является тайной, но выполнивши указанную командочку под FreeBSD и набрав gem list, мы получим:

*** LOCAL GEMS ***

(пустой список)

Караул! Куда делись все мои инсталлированные gems?

В начале этого года в freebsd-ruby мяли неверность gem path выглядевшую как /usr/local/lib/ruby19/gems/1.9. В порту появился патч, исправлявший ее на "правильную" /usr/local/lib/ruby/gems/1.9. После ручного обновления rubygems, gem path снова сбрасывается на кривую /usr/local/lib/ruby19/gems/1.9. Именно ее пытается прочесть новая версия и, конечно, не находит там ни единого установленного gem'а.

То есть, чтобы направить rubygems на истинный путь, вам придется руками подредактировать файл /usr/local/lib/ruby/site_ruby/1.9/rubygems/defaults.rb. Патч:

--- defaults.rb.orig  2010-03-01 14:13:23.000000000 +0200
+++ defaults.rb       2010-03-01 14:13:38.000000000 +0200
@@ -20,10 +20,6 @@
         if defined? RUBY_FRAMEWORK_VERSION then
               File.join File.dirname(ConfigMap[:sitedir]), 'Gems',
                                 ConfigMap[:ruby_version]
-    # 1.9.2dev reverted to 1.8 style path
-    elsif RUBY_VERSION > '1.9' and RUBY_VERSION < '1.9.2' then
-      File.join(ConfigMap[:libdir], ConfigMap[:ruby_install_name], 'gems',
-                ConfigMap[:ruby_version])
         else
               File.join(ConfigMap[:libdir], ruby_engine, 'gems',
                                 ConfigMap[:ruby_version])

Теперь наберите:

% gem env | grep -A2 PATH

и убедитесь что все работает как надо.

No comments:

Post a Comment