2012-03-09 4 views
3

Я пишу рубиновый камень, который пользователи могут установить и использовать рубиновый инструмент командной строки для взаимодействия с сервисом. Вы можете запустить и остановить службу (она будет выведена из дочернего процесса).Как я должен создать свою службу командной строки рубинового драгоценного камня?

Я провел много исследований, чтобы лучше всего использовать сетевую услугу, такую ​​как ØMQ/EventMachine, и я получаю способ создания жемчужины Ruby, которые будут устанавливать двоичный файл, который вы можете использовать в командной строке , но я изо всех сил пытаюсь установить хорошую структуру кода.

Моя утилита командной строки будет принимать различные аргументы (я буду использовать Trollop), и она будет использовать различные классы, чтобы что-то делать, и использовать различные другие рубиновые драгоценные камни.

Я не уверен, где я должен поместить свои файлы классов и как их требовать в моем двоичном формате, поэтому пути верны.

ответ

8

Во многом RubyGems позаботится об этом для вас. Вам нужно будет включить ваш исполняемый файл в список files и поместить его в executables в свой gemspec. Распространено положить исполняемый в bin в каталоге, например:

$ ls 
bin/ myapp.gemspec lib/ Rakefile 
$ ls bin 
bin/myapp 

Ваш gemspec будет выглядеть:

Gem::Specification.new do |s| 
    s.name = 'myapp' 

    # whatever else is in your gemspec 

    s.files = ["bin/myapp","lib/myapp.rb"] # or whatever other files you want 
    s.executables = ["bin/todo"] 
end 

В этот момент, когда пользователи установить приложение через RubyGems, myapp будет на своем пути, и lib будет в loadpath вашего приложения, так что ваш исполняемый файл может просто начать с:

#!/usr/bin/env ruby 

require 'myapp' 
# whatever other requires 

Единственная проблема заключается в том, что во время разработки вы не можете просто сделать bin/myapp и запустить приложение. Некоторые разработчики манипулируют путем загрузки через $: или $LOAD_PATH, но это считается плохим.

Если вы используете bundler, проще всего просто запустить приложение локально с помощью bundle exec, например. bundle exec bin/myapp. Вы можете поочередно использовать переменную среды RUBYLIB, например. RUBYLIB=lib bin/myapp, который поместит lib в путь загрузки.

0

Поскольку все драгоценные камни имеют открытый источник по своей природе, вы всегда можете посмотреть на некоторые из лучших примеров. Использование построителя драгоценных камней, например, jeweler или hoe, также послужит основой для организационной работы.

+3

«Источник-доступный» может быть лучшим термином. Просто потому, что вы можете видеть, что исходный код не означает, что это программное обеспечение с открытым исходным кодом в обычном смысле. –

+0

Спасибо, я посмотрю на них! Я не разработчик рубинов днем, поэтому я изо всех сил стараюсь получить хорошую основу. – tarnfeld

+0

Я имел в виду больше «с открытым исходным кодом», так как я не знаю ни одного, который намеренно запутывается. Здесь «open source» и «free open source» отличаются. Тем не менее, подавляющее большинство драгоценных камней публикуется с какой-то лицензией с открытым исходным кодом. – tadman

4

Вы можете создать структуру проекта драгоценного камня с помощью Bundler.

Кратко:

Установите Bundler

$ gem install bundler 

Используйте Bundler для создания проекту Gem

$ bundle gem myapp 
$ cd myapp 

Добавить исполняемый

$ mkdir bin 
$ cat > bin/mycommand << EOSCRIPT 
    #!/usr/bin/env ruby 

    require 'myapp' 

    puts "Executing myapp" 
    EOSCRIPT 
$ chmod +x bin/mycommand 

Установите ваш Gem

$ rake install 

Выполнить сценарий

$ mycommand 
Executing mycommand 

Поделитесь утилиту на rubygems.org

$ rake release 

Больше документов на the website

 Смежные вопросы

  • Нет связанных вопросов^_^