【问题标题】:Get the name of a rails gem inside a rake task在 rake 任务中获取 rails gem 的名称
【发布时间】:2020-09-07 07:07:47
【问题描述】:

我想构建一个 rake 任务并将其作为 gem 分发。它包含在目标宝石中。在目标内部调用时,它应该生成一个具有目标 gem 名称的文件。但是我找不到一种方法来获取调用 rake 任务的目标 gem 的名称。

有人知道怎么做吗?

【问题讨论】:

  • “目标宝石”是什么意思?如果某些东西导入了您的宝石,您永远不会真正找出原因。您的代码刚刚被加载。
  • 目标 gem 是我在其中运行任务的 gem,前提是我正在开发的 gem。如果我的 gem 被称为“gem_with_a_rake_task”,那么目标 gem 就是执行“gem 'gem_with_a_rake_task'”的那个。在目标 gem 内部,我正在执行 rake my_task,其中 my_task 由“gem_with_a_rake_task”提供。在我的任务中,我需要找到目标 gem 的名称。调用“rake my_task”的 gem 的名称。

标签: ruby-on-rails ruby rubygems rake


【解决方案1】:

我并不完全清楚您所说的目标宝石是什么意思,但可以在 rake 任务中获取当前宝石的名称。

在您的 rakefile 中:

desc 'Gets the gem name'
task 'gemname' do 
  gemspec = Bundler.load_gemspec(Dir.glob('*.gemspec').first)
  puts gemspec.name
end

【讨论】:

  • 如何在这个任务中找到“your_gem”的值?如果我已经知道,我不需要 gemspec.name
  • 假设有一个gemspec文件,应该是这样,你可以使用一个glob - gemspec = Bundler.load_gemspec(Dir.glob(File.join(__dir__, '*.gemspec')).first)
  • 在阅读了你的目标 gem 描述后 - 如果你将任务添加到 gem_with_a_rake_task 中,但需要在目标 gem 的 Rakefile 中包含包含任务的文件,你可以尝试使用gemspec = Bundler.load_gemspec(Dir.glob('*.gemspec').first)。假设您没有在代码中更改 cwd,gob 将搜索的路径是您运行 rake 的任何位置。
  • 不,但你能更新答案吗?因为答案包含 your_gem.gemspec
猜你喜欢
  • 2011-05-08
  • 2012-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-24
  • 2012-12-01
  • 1970-01-01
相关资源
最近更新 更多