Показ дописів із міткою gem. Показати всі дописи
Показ дописів із міткою gem. Показати всі дописи

неділя, 15 лютого 2009 р.

Шлях до Ruby 1.9. is it ruby 1.9

Нещодавно анонсований Ruby 1.9.1 - це перший стабільний ("production-ready") реліз серії 1.9.
Як сказав Дейв Томас (Dave Thomas):
"Якщо ви підтримуєте якийсь публічний Ruby-проект (Gem, додаток чи ще щось), то я настійно рекомендую завантажити цей реліз. Тим самим ви допоможете спільноті розробників з двох причин. По-перше, різні несумісності між Ruby 1.9 та Ruby 1.8 означають, що деякі ділянки коду перестануть працювати без додаткової доробки. Виправляючи свій код, ви допомагаєте іншим у його використанні."

Зовсім нещодавно з'явився проект isitruby19, завдяки якому (точніше кажучи завдяки відвідувачам якого), можна довідатися, які геми готові для використання в Ruby 1.9. Кожен відвідувач може внести вклад, перевіривши геми на своїй платформі і відписатися про результати в коментарі.

пʼятниця, 3 серпня 2007 р.

Побудова власно пакету gem

Цією статтею я хочу розпочати невеликий цикл записів про створення і підтримку власного коду Ruby. В більшій мірі я це пишу для себе, як шпаргалку :). Можливо це комусь і стане у нагоді.

В цій статті я хочу поділитись досвідом побудови інсталяційного пакету gem для Ruby. Якщо Вам здається, що Ви маєте бібліотеку, яка, можливо, була б корисна для інших людей, Ви можете легко упакувати її як gem і розповсюджувати її через Інтернет (для Ruby існує спеціалізований сайт для сторонніх бібліотек - http://rubyforge.org/).
Процес перетворення Вашого коду у пакет gem складається з двох частин. Не хвилюйтесь, Вам не доведеться змінювати ваш код, щоб пристосувати його до gem. По-перше, Вам необхідно змінити(створити) структуру каталогів, яка б відповідала потребам gem. Далі для прикладу я буду використовувати свій власний проект під назвою uaenv - http://rubyforge.org/projects/uaenv/.
Структура каталогу організована, як вказано нижче:
  • /uaenv/lib : цей каталог містить весь код Ruby, який має безпосереднє відношення до проекту.
  • /uaenv/pkg : каталог, у який власне і буде згенерований gem.
  • /uaenv/tests : каталог, у якому буде знаходитись код для тестів.
  • /uaenv/README : цей файл повинен містити опис проекту, ліцензію, і взагалі будь-яку інформацію за бажанням.

Це мінімум для того щоб створити gem.
Складніші проекти можуть містити наступні директорії:
  • /uaenv/bin : каталог для будь-яких виконуваних скриптів, які є частиною проекту.
  • /uaenv/doc : додаткова документація по проекту.

Це буде корисним, якщо існує необхідність додати нові інструменти командного рядка при встановленні в систему.
RubyGems підтримує зберігання не тільки джерельних кодів Ruby. Коли користувач встановлює пакет gem на комп'ютері, gem намагається скомпілювати додатковий код як частину установки. Перевагою використання gem таким чином є, те що не-Ruby код буде пов'язаний з фактичними бібліотеками, які встановленні на комп'ютері. Наприклад, це трапляється коли Ви встановлюєте RMagick. Якщо інсталятор не знайшов належних бібліотек(ImageMagick), він потерпить невдачу. Крім того до пакету можна додати заздалегідь скомпільовані файли, щоб уникнути проблеми неможливості компілювати код на комп'ютері призначення.
Як тільки Ви влаштували свій код у коректну структуру каталогів, Ви можете зосередитись на іншій частині процесу побудови gem - специфікації gem. Це декларація, яка надає всю необхідну інформацію щоб побудувати gem. Ви можете створити специфікацію gem, як автономний файл, але простіше якщо Ви будете використовувати стандартні засоби, створите Rakefile. Це значно спростить процес побудови.
Нижче наведений приклад файлу Rakefile, який повинен міститись у кореневому каталозі проекту uaenv.
require 'rubygems'
Gem::manage_gems
require 'rake/gempackagetask'
spec = Gem::Specification.new do |s|
s.platform = Gem::Platform::RUBY
s.name = "uaenv"
s.version = "0.0.3"
s.author = "Anton Maminov"
s.email = "anton.linux @nospam@ google.com"
s.homepage = "http://rubyforge.org/projects/uaenv"
s.rubyforge_project = "uaenv"
s.summary = "Simple processing of Ukrainian strings"
s.files = FileList['lib/**/*.rb','test/*'].to_a
s.require_path = "lib"
s.autorequire = "uaenv"
s.test_files = Dir.glob('tests/*.rb')
s.has_rdoc = true
s.extra_rdoc_files = ["README"]
end

Rake::GemPackageTask.new(spec) do |pkg|
pkg.need_zip = true
end

task :default => "pkg/#{spec.name}-#{spec.version}.gem" do
puts "generated latest version"

Це хороший приклад стандартного Rakefile для gem. Тут Ви можете бачити, що він включає RubyGems і додає деякі завдання для rake. Головна специфікація забезпечує всю інформацію про gem. Останнє завдання подає простого помічника який дозволяє запустити rake у каталозі і автоматично побудувати пакет gem і файл zip. Кожна лінія специфікації має спеціальне призначення. За більш детальнішою інформацією зверніться на офіційний сайт Rubygems - http://docs.rubygems.org/.

четвер, 2 серпня 2007 р.

Вирішення проблеми з rubygems під Ubuntu Linux 7.04

Вчора виникла необхідність встановити декілька пакетів з репозиторію rubygems. Раніше я вже писав про проблеми з цим. Після виконання $ sudo gem install <назва пакету>, через декілька хвилин система вішалась намертво. Неприємні враження :(.
Був проведений простий аналіз роботи. Ось як це відбувалось.
$ sudo gem install unicode

Дослідження трафіку утилітою iptraf показало що gem з'єднується з IP адресою 205.234.109.18(rubyforge.org) і завантажує приблизно 870 пакетів (125500 байт). Після закриття з'єднання починалось найцікавіше. Розмір swap(розділ підкачки) починав активно збільшуватись. Саме час відкинутись на спинку крісла і чекати завершення роботи :). В моєму випадку - піти перекурити. О жах! Свап 600 метрів. Комп практично не реагує на маніпуляції. Допомогла тільки перезавантаження системи.
Перевірив версія gem:
$ gem -v
0.9.0
Тоді як на оффсайті (http://rubyforge.org/projects/rubygems/) доступна 0.9.4. Завантажую і встановлюю її.
$ wget http://rubyforge.org/frs/download.php/20989/rubygems-0.9.4.tgz
$ tar xzvf rubygems-0.9.4.tgz
$ cd rubygems-0.9.4
$ sudo ruby setup.rb
Далі використовую інсталятор rubygem для встановлення себе самого.
$ sudo gem install rubygems-update
Ииии... чудо. Воно таки встановилося і працює:
$ gem -v
0.9.4


Хто винен? Висновки робіть самі...
P.S. І все одно воно працює повільно :(, але хоча б працює...