加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 01:58:39 所属栏目:百科 来源:网络整理
导读:在我的黄瓜场景中,如果我调用rake db:schema:在目标Rails应用程序文件夹中加载,我得到黄瓜进程的$LOAD_PATH而不是Rails应用程序自己的Gemfile /加载路径.我觉得这很奇怪. 结果是我收到以下错误: no such file to load -- rails/all 我无法在我的黄瓜场景
在我的黄瓜场景中,如果我调用rake db:schema:在目标Rails应用程序文件夹中加载,我得到黄瓜进程的$LOAD_PATH而不是Rails应用程序自己的Gemfile /加载路径.我觉得这很奇怪.

结果是我收到以下错误:

no such file to load -- rails/all

我无法在我的黄瓜场景之外重现它.

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

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

任何人都可以想到为什么一个子进程(rake -T或rake db:schema:load或rails runner …;由系统,exec,%x […]或反引号调用;将从父进程开始’$LOAD_PATH(来自黄瓜场景的Gemfile)而不是它自己的$LOAD_PATH(来自Rails应用程序的Gemfile)?

解决方法

当您使用bundler时,无论是通过bundle exec还是需要’bundler / setup’,它都会找到您的Gemfile,然后将其位置放在ENV [“BUNDLE_GEMFILE”]中.但是,如果已经设置了,那么bundler只会重用该值.这就是导致你的Rails应用程序使用黄瓜进程的Gemfile的原因.

如果要在不同Gemfile的上下文中执行某些操作,请首先清除ENV [“BUNDLE_GEMFILE”]. Bundler提供了Bundler.with_clean_env(& blk)方法,可能会有所帮助;它会在Bundler加载之前用环境执行你的块.当然,您也可以通过类似系统的东西(“env -u BUNDLE_GEMFILE rake sometask”)手动清除它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读