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