rails 全局安装的 rake 任务 gem

rails rake task with globally installed gem

我正在尝试编写一个 rake 文件以从 csv 导入数据,我想使用 smarter_csv gem。我在全局安装了 gem(我不想将它添加到我的 Gemfile,因为这是一次性任务)。

在我的 rake 文件中我需要 'smarter_csv' 但是当我 运行 任务时我得到以下错误:

rake aborted!
LoadError: cannot load such file -- smarter_csv

我能找到的每个佣金示例都告诉你只需要 'foo'。在需要 smarter_csv.

之后,我可以在 irb 中手动 运行 代码

我错过了什么?

(如果重要的话,我在 macOS Catalina 上使用 rbenv)

Rails 使用 bundler,并将 gemfile 中提到的 gem 加载到内存中。看起来你没有任何其他选择。

我有一个类似的用例,我试过把它放到这样的开发组中,

group :development do
  gem 'smarter_csv'
end

如果你确实想加载一个 gem 而你的 Gemfile 中没有它,你可以在你的 rake 任务中执行以下操作:

$: << '/Users/<user>/.rvm/rubies/ruby- 
x.x.x/lib/ruby/gems/x.x.x/gems/smarter_csv-x.x.x/lib'
require 'smarter_csv'

我认为在您的 Gemfile 中使用 require: false 选项的 gem 选项更合适。 gem 在您明确要求之前不会加载。