相关疑难解决方法(0)

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
查看次数

为什么这个gem没有将rake任务添加到Rails应用程序?

我们有一个通过Rake任务运行的gem.该任务定义于lib/tasks/<namespace>.rake.在读取未找到宝石内部的Rake任务后,我确认.gemspec包含定义任务的文件; 还有一个铁路应该包括在宝石包括rake任务所建议的任务.然而我们的Rails 4.1应用程序似乎没有加载Rake任务.

我错过了什么?

rake rubygems ruby-on-rails bundler

7
推荐指数
2
解决办法
876
查看次数

没有找到宝石内的耙子任务

我已经实现什么edebill中提出他的回答这个问题.

如果我以通常的方式指向gem,将它安装在我的环境中

gem 'activerecord_datawarehouse'
Run Code Online (Sandbox Code Playgroud)

rake -T不显示我的rake任务,但如果我直接指向gem源代码,就像

gem 'activerecord_datawarehouse', :path => "/home/acras/code/activerecord_datawarehouse"
Run Code Online (Sandbox Code Playgroud)

它显示和rake任务完美地工作.

我在这里可以缺少什么?我做了双重检查,安装的gem与我在源代码中的相同.

rake gem ruby-on-rails

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

标签 统计

rake ×3

ruby-on-rails ×3

bundler ×1

gem ×1

ruby ×1

rubygems ×1

task ×1