Ruby 如何添加';lib';要使用不带gempec的Gemfile加载_路径?

Ruby 如何添加';lib';要使用不带gempec的Gemfile加载_路径?,ruby,bundler,require,Ruby,Bundler,Require,我用bundle init启动了一个小项目。实际上,我构建的是一个应用程序,而不是gem,所以我决定不使用.gemspec文件。 我面临的问题是,我不能使用require来要求位于lib中的文件。例如,在bundle exec ruby bin/console上,我得到: 无法加载这样的文件--new/gem 对于gempec文件,它将起作用,因为默认情况下它有require_path=[“lib”]选项,在require“bundler/setup”之后,您可以使用require访问位于lib

我用
bundle init
启动了一个小项目。实际上,我构建的是一个应用程序,而不是gem,所以我决定不使用.gemspec文件。 我面临的问题是,我不能使用
require
来要求位于
lib
中的文件。例如,在
bundle exec ruby bin/console
上,我得到:

无法加载这样的文件--new/gem

对于gempec文件,它将起作用,因为默认情况下它有
require_path=[“lib”]
选项,在
require“bundler/setup”
之后,您可以使用
require
访问位于
lib
中的文件

如果我不使用gemspec文件,我怎样才能提示Bundler我想从
lib
要求

有几种方法:

  • 使用
    require\u relative./lib/app“
  • lib
    添加到
    bin/console
    中的
    $LOAD\u PATH
    $LOAD\u PATH.unshift./lib
  • 只需在命令行内联添加它:
    bundle exec ruby-Ilib bin/console

  • 请注意,如果您在应用程序中使用了
    require\u relative
    (您应该这样做),那么
    lib
    不需要位于
    $LOAD\u PATH
    ,您应该能够
    require“PATH/to/app”
    任何您想加载它的地方。

    谢谢。第二种选择最适合所有人。因为
    rubocop packaging
    说我不应该使用
    require\u relative
    ,手动指定
    -I
    会太单调乏味。我只是认为会有一些捆绑程序选项,我不知道,但它实际上可以用普通Ruby解决。@Kirill有趣。只要阅读该文档,它确实是有意义的,但要清楚,这是针对测试代码的:“我们想强调的是,在lib/中使用require_relative并没有错,它只是在测试代码到lib目录中使用它,防止了“在系统范围内测试安装的库”用例。”对于测试,在测试助手中只需将
    lib
    添加到
    $LOAD\u PATH
    中是很常见的。谢谢你,Lee。我不知道这个规则是用于测试的,因为在我的例子中,它是在根目录中的文件上触发的。这对于测试来说是有意义的,默认情况下,RSpec将
    lib
    spec
    添加到
    $LOAD\u PATH