【问题标题】:Rake des not know how to build task 'compile', how to track this error?Rake des 不知道如何构建任务“编译”,如何跟踪此错误?
【发布时间】:2012-12-16 09:47:09
【问题描述】:

我收到错误“不知道如何构建任务'编译'”。我还是 ruby​​ 的新手,但是所有这些痕迹似乎都指向我没有编写的代码,那么我应该如何处理这个错误?

#> rake 编译 --trace
耙中止!
不知道如何构建任务“编译”
/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:

需要“捆绑器/gem_tasks” 需要“耙子” 需要“耙子/扩展任务” $myDir = File.dirname(__FILE__) 需要 $myDir + '/lib/Q/console.rb' 需要 $myDir + '/lib/Q/version.rb' 需要 $myDir + '/lib/Q/rakeoverride.rb' 需要 $myDir + '/lib/Q/filetools.rb' # 这只是打印出一个标题和 gems 版本号 puts Q::Console.txHead('Q-Pool Ruby Extension Q V' + Q::VERSION) # 从 gemspec 加载规范并创建 # 每个扩展文件的任务 # 可执行文件。 规格 = Gem::Specification.load('Q.gemspec') spec.executables.each 做 |f| Rake::ExtensionTask.new('Q', spec) 做 |ext| # 扩展文件是*.so,所以我们需要 # 砍掉扩展名得到名字 ext.name = f.gsub(/\.so$/,'') ext.tmp_dir = 'tmp' ext.lib_dir = 'bin' 结尾 结尾 # 通过删除旧的二进制文件来清理环境 override_task :clean 做 puts Q::Console.txNote('cleaning...') clear_tmp 开始 Rake::Task["clean:original"].invoke puts Q::Console.txConfirm('...cleaned!') 救援 puts Q::Console.txAlert('could not clean: ' + $!.to_s) 出口 结尾 结尾 # 初始化目录结构 任务:初始化做 FileCheckCreateDirectory($myDir + '/bin') FileCheckCreateDirectory($myDir + '/tmp') 结尾 # 编译模块并安装到 lib override_task :编译做 puts Q::Console.txNote('正在编译...') 开始 Rake::Task["compile:original"].invoke 提出 Q::Console.txConfirm('...已编译!') 救援异常 puts Q::Console.txAlert('无法编译:' + $!.to_s) 出口 确保 clear_tmp 看跌期权 结尾 结尾 # 显示命令 任务:帮助做 显示帮助 结尾 # 构建模块并安装 任务 :build => [:init, :clean, :compile] Bundler::GemHelper.install_tasks # 删除所有临时文件 def clear_tmp FileUtils.rm_rf(Dir.glob($myDir + '/tmp/*')) 结尾 # 显示帮助画面 def show_help Q::Console.out(Q::Console.txCode('build') + ' 执行初始化、清理和编译。') Q::Console.out(Q::Console.txCode('clean') + ' 从 temp-dir 中删除任何旧的二进制文件。') Q::Console.out(Q::Console.txCode('compile') + ' 编译二进制文件。') Q::Console.out(Q::Console.txCode('help') + ' 登记 rake-commands (this page).') Q::Console.out(Q::Console.txCode('init') + ' 创建 gems 目录结构。') 看跌期权 结尾

【问题讨论】:

  • compile 不是标准任务 - 运行此命令时您期望/希望发生什么?
  • 不是吗?我期待它编译我的扩展!在上一个版本中,它确实......
  • 哪些扩展 - 需要 gem?资产?还有什么?
  • 一个我想为我的应用程序提供的 c++ 类。
  • 执行此操作的经典方法是为您的扩展创建一个 gem,然后 bundle install gem(它将构建所需的任何二进制文件)。请参阅here 了解如何执行此操作

标签: ruby-on-rails ruby rake


【解决方案1】:

好吧,这个错误信息真的一点用都没有……

问题在于 Gem::Specification.executables 是空的,因为 gemspec 中的正则表达式不匹配。当我迭代它时(参见 Rakefile),没有扩展任务构建,因此出现误导性错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    • 2018-07-13
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    • 2011-07-17
    • 2012-07-20
    相关资源
    最近更新 更多