相关疑难解决方法(0)

如何在Ruby脚本中运行Rake任务?

我有一个RakefileRake任务,我通常会从命令行调用:

rake blog:post Title
Run Code Online (Sandbox Code Playgroud)

我想编写一个多次调用Rake任务的Ruby脚本,但我看到的唯一解决方案是使用``(反引号)或system.

这样做的正确方法是什么?

ruby rake command-line-interface

51
推荐指数
3
解决办法
3万
查看次数

Ruby:在没有Rails的情况下从gem访问rake任务

我知道Rake任务可以在Ruby gem中的许多地方定义:

  • 在Rakefile里面
  • tasks/*.rake
  • lib/tasks/*.rake

我已经读过,当要在gem本身执行任务时,应该使用前两个.当希望公开任务时,似乎应该选择第三种选择.

网上有很多教程演示了使用Rails从gem加载Rake任务的各种方法,即利用Rails::RailTie.

但是,我想找到一种在不需要Rails的情况下在另一个gem中使用依赖gem的任务的方法.

有一个简单的解决方案吗?有人会善意地描述正确的方法,或概述哪些方法可行?

UPDATE

我已经尝试创建一个文件bin/my-gem,以便在系统上用于执行Rake任务my-gem.我把以下内容放在里面;

#!/usr/bin/env ruby
require 'rubygems'
require 'rake'
task=ARGV[0]
spec = Gem::Specification.find_by_name('dsi_core')
Dir["#{spec.gem_dir}/lib/tasks/*.rake"].each {|file| puts file and Rake::load_rakefile(file)}
Rake::Task.clear # Avoid tasks being loaded several times in dev mode
Rake::Task[task].reenable # Support re-execution of a task.
Rake::Task[task].invoke
Run Code Online (Sandbox Code Playgroud)

部分内容基于此SO帖子.

可悲的是我,因为在安装宝石,然后运行做错事my-gem mytaskmytask定义lib/test.rake再下面是输出:

/var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/task_manager.rb:49:in `[]': Don't know how to build task 'mytest' (RuntimeError)
    from /var/lib/gems/1.8/gems/rake-0.9.2/lib/rake/task.rb:298:in `[]'
    from /var/lib/gems/1.8/gems/my_gem-0.0.1/bin/my_gem:8 …
Run Code Online (Sandbox Code Playgroud)

ruby rake ruby-on-rails task

22
推荐指数
1
解决办法
9014
查看次数

标签 统计

rake ×2

ruby ×2

command-line-interface ×1

ruby-on-rails ×1

task ×1