gpt4 book ai didi

ruby-on-rails - 在什么情况下会从父进程获取 Ruby $LOAD_PATH?

转载 作者:数据小太阳 更新时间:2023-10-29 07:38:36 25 4
gpt4 key购买 nike

在我的 Cucumber 场景中,如果我在目标 Rails 应用程序文件夹中调用 rake db:schema:load,我会得到 Cucumber 进程的 $LOAD_PATH 而不是 Rails 应用程序自己的 Gemfile/load 路径。我觉得这很奇怪。

结果是我得到以下错误:

no such file to load -- rails/all

我无法在我的 cucumber 场景之外重现它。

ruby -rubygems -e "system 'rake -T'"

正常工作 -> 'rake -T' 有应用程序自己的基于 Gemfile 的 $LOAD_PATH;并且不会产生上述错误。

谁能想到为什么子进程(rake -Trake db:schema:loadrails runner...; 被调用通过 systemexec%x[...] 或反引号;将从父进程的 $LOAD_PATH(来自 cucumber场景的 Gemfile)而不是它自己的 $LOAD_PATH(来自 Rails 应用程序的 Gemfile)?

最佳答案

当您使用 bundler 时,无论是通过 bundle exec 还是 require 'bundler/setup',它都会找到您的 Gemfile,然后将其位置放在 ENV["BUNDLE_GEMFILE"]。但是,如果已经设置,则 bundler 只会重用该值。这就是导致您的 Rails 应用程序使用 cucumber 进程的 Gemfile 的原因。

如果您想在不同的 Gemfile 的上下文中执行某些操作,请先清除 ENV["BUNDLE_GEMFILE"]。 Bundler 提供的方法 Bundler.with_clean_env(&blk) 可能会有帮助;它使用加载 Bundler 之前的环境执行您的 block 。当然,您也可以使用 system("env -u BUNDLE_GEMFILE rake sometask") 之类的方法手动清除它。

关于ruby-on-rails - 在什么情况下会从父进程获取 Ruby $LOAD_PATH?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4911986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com