ruby-on-rails 我怎么能在rake任务中需要一个不在gemfile中的gem呢?

bfrts1fy  于 2023-04-13  发布在  Ruby
关注(0)|答案(1)|浏览(129)

我尝试在rake任务中使用gem,但我不想在开发构建中包含它,所以不想在Gemfile的开发部分包含它。
我不想把它包含在Gemfile中,因为它安装起来很慢,而且在M2 Mac上它并不总是工作。
所以我尝试只在要使用它的rake任务中包含它。
这是我人为的例子

namespace :utility do
  task contrived_test_funct: :environment do
    begin
      gem 'rmagick'
    rescue LoadError
      system("gem install rmagick")
      gem 'rmagick'
    end

    require 'RMagick'
    file_names = Dir.glob(File.join("/tmp", "**", "*"))
    file_names = file_names.select { |f| f.include?(".pdf") }
    file_names.each do |file_name|
      im = Magick::Image.read(file_name)
      im[0].write(filename.gsub(".pdf",".jpg"))
    end
  end
end

这应该只是把所有的PDF文件在我的临时目录和吐出来的jpgs。如果我有我的gem文件中的宝石和删除开始/救援块,这一切都工作在我的本地系统的治疗。
当我删除gemfile更改并取消注解开始/rescue块时,它福尔斯了
我明白了

Gem::LoadError: rmagick is not part of the bundle. Add it to your Gemfile.

问:我如何才能只在rails应用程序/存储库中的特定rake任务中需要gem?

f1tvaqid

f1tvaqid1#

我有一个部分的解决方案。不完美,但它让我越过了界限。
您可以在Rails gem文件中添加一个新的gem组

group :special_group, optional: true do
  gem 'rmagick'
end

然后在rake任务中你可以要求gem。你也可以捕获错误并让你的开发伙伴知道如何安装gem。

begin
  require 'RMagick'
rescue LoadError
   abort("RMagick is selectively installed, Run `bundle config set --local with rmagick`" +
 "and then bundle install and this rake task again")
end

相关问题