我尝试在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?
1条答案
按热度按时间f1tvaqid1#
我有一个部分的解决方案。不完美,但它让我越过了界限。
您可以在Rails gem文件中添加一个新的gem组
然后在rake任务中你可以要求gem。你也可以捕获错误并让你的开发伙伴知道如何安装gem。