Rake des не знает, как построить задачу «компиляция», как отследить эту ошибку?

Я получаю сообщение об ошибке «Не знаю, как построить задачу« компиляция »». Я все еще новичок в Ruby, но все эти следы, похоже, указывают на код, который я не писал, так что мне делать с этой ошибкой?

#> rake compile --trace
rake aborted!
Don't know how to build task 'compile'
/usr/local/rvm/gems/ruby-1.9.3-p286/gems/rake-10.0.3/lib/rake/task_manager.rb:49:in `[]'
/usr/local/rvm/gems/ruby-1.9.3-p286/gems/rake-10.0.3/lib/rake/application.rb:142:in `invoke_task'
/usr/local/rvm/gems/ruby-1.9.3-p286/gems/rake-10.0.3/lib/rake/application.rb:101:in `block (2 levels) in top_level'
/usr/local/rvm/gems/ruby-1.9.3-p286/gems/rake-10.0.3/lib/rake/application.rb:101:in `each'
/usr/local/rvm/gems/ruby-1.9.3-p286/gems/rake-10.0.3/lib/rake/application.rb:101:in `block in top_level'
/usr/local/rvm/gems/ruby-1.9.3-p286/gems/rake-10.0.3/lib/rake/application.rb:110:in `run_with_threads'
/usr/local/rvm/gems/ruby-1.9.3-p286/gems/rake-10.0.3/lib/rake/application.rb:95:in `top_level'
/usr/local/rvm/gems/ruby-1.9.3-p286/gems/rake-10.0.3/lib/rake/application.rb:73:in `block in run'
/usr/local/rvm/gems/ruby-1.9.3-p286/gems/rake-10.0.3/lib/rake/application.rb:160:in `standard_exception_handling'
/usr/local/rvm/gems/ruby-1.9.3-p286/gems/rake-10.0.3/lib/rake/application.rb:70:in `run'
/usr/local/rvm/gems/ruby-1.9.3-p286/gems/rake-10.0.3/bin/rake:33:in `'
/usr/local/rvm/gems/ruby-1.9.3-p286/bin/rake:23:in `load'
/usr/local/rvm/gems/ruby-1.9.3-p286/bin/rake:23:in `'

это Rakefile:

require 'bundler/gem_tasks'
require 'rake'
require 'rake/extensiontask'
$myDir = File.dirname(__FILE__)

require $myDir + '/lib/Q/console.rb'
require $myDir + '/lib/Q/version.rb'
require $myDir + '/lib/Q/rakeoverride.rb'
require $myDir + '/lib/Q/filetools.rb'

# this just prints out a header and gems version number
puts Q::Console.txHead('Q-Pool Ruby Extension Q V' + Q::VERSION)

# load specifiation from gemspec and create
# a task for every extension file in
# executables.
spec = Gem::Specification.load('Q.gemspec')
spec.executables.each do |f|
  Rake::ExtensionTask.new('Q', spec) do |ext|
    # extension file is *.so, so we need
    # to chop the extension to get the name
    ext.name    = f.gsub(/\.so$/,'')
    ext.tmp_dir = 'tmp'
    ext.lib_dir = 'bin'
  end
end

# clean environment by removing old binaries
override_task :clean do
  puts Q::Console.txNote('cleaning...')
  clear_tmp
  begin
    Rake::Task["clean:original"].invoke
    puts Q::Console.txConfirm('...cleaned!')
  rescue
    puts Q::Console.txAlert('could not clean: ' + $!.to_s)
    exit
  end
end

# initialize directory structure
task :init do
  FileCheckCreateDirectory($myDir + '/bin')
  FileCheckCreateDirectory($myDir + '/tmp')
end

# compile module and install to lib
override_task :compile do
  puts Q::Console.txNote('compiling...')
  begin
    Rake::Task["compile:original"].invoke
    puts Q::Console.txConfirm('...compiled!')
  rescue Exception
    puts Q::Console.txAlert('could not compile: ' + $!.to_s)
    exit
  ensure
    clear_tmp
    puts
  end
end

# show commands
task :help do
  show_help
end

# build module and install
task :build => [:init, :clean, :compile]

Bundler::GemHelper.install_tasks

# remove any temporary files
def clear_tmp
  FileUtils.rm_rf(Dir.glob($myDir + '/tmp/*'))
end

# display help screen
def show_help
  Q::Console.out(Q::Console.txCode('build') + '      performs init, clean and compile.')
  Q::Console.out(Q::Console.txCode('clean') + '      removes any old binaries from temp-dir.')
  Q::Console.out(Q::Console.txCode('compile') + '    compiles binaries.')
  Q::Console.out(Q::Console.txCode('help') + '       enlists rake-commands (this page).')
  Q::Console.out(Q::Console.txCode('init') + '       creates gems directory structure.')
  puts
end


person rhavin    schedule 01.01.2013    source источник
comment
compile - нестандартная задача - чего вы ожидаете / хотите, чтобы произошло, когда вы запустите эту команду?   -  person PinnyM    schedule 02.01.2013
comment
нет? Я ожидаю, что он скомпилирует мои расширения! В последней версии это было…   -  person rhavin    schedule 02.01.2013
comment
Какие расширения - необходимые геммы? Ресурсы? Что-то другое?   -  person PinnyM    schedule 02.01.2013
comment
класс C ++, который я хочу сделать доступным для моего приложения.   -  person rhavin    schedule 02.01.2013
comment
Классический способ сделать это - создать гем для вашего расширения, а затем bundle install гем (который будет создавать любые требуемые двоичные файлы). См. здесь, чтобы узнать, как это сделать.   -  person PinnyM    schedule 02.01.2013
comment
Да, это то, что я делаю ... но установка пакета больше не работает, потому что компиляция задачи - которая является важной задачей для задачи сборки - не может быть построена, и я просто хочу выяснить, почему это так.   -  person rhavin    schedule 02.01.2013


Ответы (1)


Хорошо, это сообщение об ошибке было действительно бесполезным ...

Проблема заключалась в том, что Gem :: Specification.executables был пуст из-за несоответствия регулярного выражения в gemspec. Пока я повторяю его (см. Rakefile), не было сборки extensiontask, отсюда и вводящая в заблуждение ошибка.

person rhavin    schedule 04.01.2013