【问题标题】:rails rake task with globally installed gem带有全局安装 gem 的 rails rake 任务
【发布时间】:2020-12-24 06:16:21
【问题描述】:

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

在我的 rake 文件中,我需要“smarter_csv”,但是当我运行任务时出现以下错误:

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

我能找到的每个 rake 示例都告诉你只需要 'foo'。需要 smarter_csv 后,我可以在 irb 中手动运行代码。

我错过了什么?

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

【问题讨论】:

  • 您如何看待使用 require: false 选项将 gem 添加到您的 Gemfile 中?在这种情况下,除非您明确要求,否则它不会被加载。

标签: ruby-on-rails ruby rake smartercsv


【解决方案1】:

如果您确实想在 Gemfile 中不包含 gem 的情况下加载它,您可以在 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'

我认为使用 require: false 选项在 Gemfile 中包含 gem 的选项更合适。除非您特别需要,否则不会加载 gem。

【讨论】:

  • 是的,这绝对是 $LOAD_PATH 的事情。这是我所做的: path = "#{ENV["HOME"]}/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/smarter_csv-1.2.6/lib" $LOAD_PATH
【解决方案2】:

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

我有一个类似的用例,我尝试将它放入这样的开发组中,

group :development do
  gem 'smarter_csv'
end

【讨论】:

    猜你喜欢
    • 2012-01-23
    • 2012-12-01
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    • 2012-10-03
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多