Как вы генерируете исполняемые файлы в геме с помощью Rake?

Я изучаю Ruby недавно, и я еще не залез в грязные закоулки изучения Rake. Я играл с NetBeans и сделал небольшой проект Ruby с файлом, который просто печатает «Hello, World!». Я просматривал файл Rakefile, который генерирует NetBeans, и заметил, что в нем закомментирована строка s.executables, поэтому я раскомментировал и попытался создать его. Конечно, это не удалось с:

Don't know how to build task 'bin/your_executable_here'

Что я пытаюсь сделать, так это выяснить, как заставить это работать. Я погуглил и не могу найти никакой информации о том, как правильно сгенерировать исполняемый файл. Вот Rakefile, сгенерированный NetBeans:

require 'rubygems'
require 'rake'
require 'rake/clean'
require 'rake/gempackagetask'
require 'rake/rdoctask'
require 'rake/testtask'

spec = Gem::Specification.new do |s|
  s.name = 'Learning'
  s.version = '0.0.1'
  s.has_rdoc = true
  s.extra_rdoc_files = ['README', 'LICENSE']
  s.summary = 'Your summary here'
  s.description = s.summary
  s.author = ''
  s.email = ''
  s.executables = ['your_executable_here']
  s.files = %w(LICENSE README Rakefile) + Dir.glob("{bin,lib,spec}/**/*")
  s.require_path = "lib"
  s.bindir = "bin"
end

Rake::GemPackageTask.new(spec) do |p|
  p.gem_spec = spec
  p.need_tar = true
  p.need_zip = true
end

Rake::RDocTask.new do |rdoc|
  files =['README', 'LICENSE', 'lib/**/*.rb']
  rdoc.rdoc_files.add(files)
  rdoc.main = "README" # page to start on
  rdoc.title = "Learning Docs"
  rdoc.rdoc_dir = 'doc/rdoc' # rdoc output folder
  rdoc.options 

Извините, если это глупый вопрос, я честно пытался найти информацию сам.

РЕДАКТИРОВАТЬ: я не знал, что должен быть исполняемый файл с тем же именем, что и файл по умолчанию, указанный вами в ./bin в вашем проекте. Я все понял.


person Rayne    schedule 24.09.2009    source источник
comment
Вы хотите, чтобы Netbeans запускал файл, или вам нужна задача rake, которая генерирует исполняемый файл Ruby (.bat или .sh)?   -  person khelll    schedule 24.09.2009


Ответы (2)


Массив s.executables должен содержать имена исполняемых файлов в каталоге bin вашего гема.

 s.executables = %w( my_awesome_commandline_churner )
person Julik    schedule 24.09.2009
comment
Правильно, похоже, что никто не заботится о том, чтобы документировать это очень хорошо. :п - person Rayne; 30.09.2009
comment
См.: docs.rubygems.org/read/chapter/20#executables. , если сомневаетесь, посмотрите, как это делают все остальные. - person Matt Haley; 14.10.2009

Этот код используется для создания файла gem. Gems — это устройства управления пакетами ruby. Некоторые драгоценные камни поставляются с исполняемыми файлами сценариев, которые можно запускать из командной строки. Они помещаются в каталог ./bin при сборке гема, а при его развертывании копируются в ту же папку, что и исполняемый файл ruby.

Чтобы сделать файл исполняемым, вам нужно добавить шабанг (#!/user/local/bin/ruby) в первую строку и изменить права доступа к файлу, чтобы разрешить выполнение.

person John F. Miller    schedule 24.09.2009
comment
Итак, что именно мне нужно сделать, чтобы заставить его сделать это? Это просто дает мне ошибку «Не знаю, как построить задачу bin/testexe». Должен ли я помещать файл в папку bin относительно файла Rakefile? Потому что я попробовал это, и он продолжал выдавать мне ошибку. Я начинаю задаваться вопросом, может быть, это проблема не только NetBeans... - person Rayne; 24.09.2009
comment
Неважно, моя тупая задница догадалась. :\, Спасибо за вашу помощь. - person Rayne; 24.09.2009