Как вызывать/требовать Ruby 1.8 Lib из Ruby 1.9

Я использую библиотеку Ruby 1.8 kakasi-ruby, но кажется, что ее можно скомпилировать только для Ruby 1.8 (https://github.com/hogelog/kakasi-ruby/issues/2)

Мое приложение — Ruby 1.9.3, поэтому мне нужно вызвать kakasi-ruby из Ruby 1.9.3.

Как мне поступить?

Должен ли я открывать подпроцесс с Ruby 1.8 и ждать его завершения, чтобы получить возвращаемое значение процесса?

Изменить: https://github.com/hogelog/kakasi-ruby


person Peter Lee    schedule 08.10.2012    source источник
comment
Не могли бы вы дать ссылку на библиотеку, которую вы используете? Возможно, есть альтернатива, работающая с Ruby 1.9.3.   -  person unnu    schedule 08.10.2012


Ответы (2)


Нашел 3 возможных пути:

  • Кажется, в репозитории есть ветка для 1.9. Может быть, попробовать скомпилировать это вместо этого?
  • В противном случае ваш самый быстрый вариант, вероятно, вернуться к 1.8, в зависимости от того, какое это приложение.
  • Вызов с 1.8 может работать, НО, поскольку библиотека, похоже, является привязкой к некоторому коду C, вы, вероятно, могли бы также вызвать этот код напрямую.
person froderik    schedule 08.10.2012
comment
Отлично, ветка 1.9 работает. Кстати, нам нужно быть очень осторожными с кодировкой. Я добавил свой собственный ответ, чтобы уточнить, как использовать ветку 1.9. - person Peter Lee; 08.10.2012
comment
Кстати, вы знаете, как преобразовать его в индивидуальный драгоценный камень? чтобы я мог поставить их под RoR_Root/vendor/gems/? - person Peter Lee; 08.10.2012
comment
Не уверен, когда в нем есть нативный код. Я использую ювелирную мастерскую для создания чистых рубиновых драгоценных камней, и это очень просто. Это дает вам пару рейк-задач и все готово. Что вам нужно, так это, вероятно, файл gemspec, и я подозреваю, что вам может сойти с рук простое копирование кода с файлом gemspec в каталог RoR. (Или — вы можете указать на форк со спецификацией драгоценных камней — это было бы предпочтительнее по нескольким причинам: другим может понадобиться ваша работа, а вы избегаете наличия местных драгоценных камней.) - person froderik; 09.10.2012

Кстати, вот использование в Ruby 1.9

plee@sos:~/Japanese$ irb
1.9.3p194 :001 > require 'kakasi'
 => true 
1.9.3p194 :002 > src="前原誠司経済財政相は4日、朝日新聞などのインタビューに対し"
 => "前原誠司経済財政相は4日、朝日新聞などのインタビューに対し" 
1.9.3p194 :003 > src=src.encode("EUC-JP", "UTF-8")
 => "\x{C1B0}\x{B8B6}\x{C0BF}\x{BBCA}\x{B7D0}\x{BAD1}\x{BAE2}\x{C0AF}\x{C1EA}\x{A4CF}\x{A3B4}\x{C6FC}\x{A1A2}\x{C4AB}\x{C6FC}\x{BFB7}\x{CAB9}\x{A4CA}\x{A4C9}\x{A4CE}\x{A5A4}\x{A5F3}\x{A5BF}\x{A5D3}\x{A5E5}\x{A1BC}\x{A4CB}\x{C2D0}\x{A4B7}" 
1.9.3p194 :004 > dst=Kakasi.kakasi("-w", src)
 => "\xC1\xB0\xB8\xB6 \xC0\xBF\xBB\xCA \xB7\xD0\xBA\xD1 \xBA\xE2\xC0\xAF \xC1\xEA \xA4\xCF \xA3\xB4 \xC6\xFC \xA1\xA2 \xC4\xAB\xC6\xFC\xBF\xB7\xCA\xB9 \xA4\xCA\xA4\xC9\xA4\xCE \xA5\xA4\xA5\xF3\xA5\xBF\xA5\xD3\xA5\xE5\xA1\xBC \xA4\xCB \xC2\xD0\xA4\xB7" 
1.9.3p194 :005 > dst.force_encoding("EUC-JP")
 => "\x{C1B0}\x{B8B6} \x{C0BF}\x{BBCA} \x{B7D0}\x{BAD1} \x{BAE2}\x{C0AF} \x{C1EA} \x{A4CF} \x{A3B4} \x{C6FC} \x{A1A2} \x{C4AB}\x{C6FC}\x{BFB7}\x{CAB9} \x{A4CA}\x{A4C9}\x{A4CE} \x{A5A4}\x{A5F3}\x{A5BF}\x{A5D3}\x{A5E5}\x{A1BC} \x{A4CB} \x{C2D0}\x{A4B7}" 
1.9.3p194 :006 > dst=dst.encode("UTF-8", "EUC-JP")
 => "前原 誠司 経済 財政 相 は 4 日 、 朝日新聞 などの インタビュー に 対し" 
1.9.3p194 :007 > 
person Peter Lee    schedule 08.10.2012