我使用RVM来管理Ruby版本
在我的项目中,我使用Bundler来管理项目的宝石。
RVM也有宝石
宝石集中的宝石与Bundler的宝石没有任何联系←这是正确的吗
我得出这个结论是因为gem文件存储在不同的位置:
RVM宝石组:~/.rvm/gems/ruby-2.0.0-p247@myApp
Bundler:[my_app_dir]/vendor/bundle/gems
所以应用程序使用Bundler宝石,而不是RVM宝石集宝石。
但是当我把gem添加到我的Gemfile中时,RubyMine IDE会向我显示警告,这个gem不在RVM gemset中。所以我也将这个宝石添加到RVM宝石集(只是为了消除这个警告)。
所以问题是:
- 有没有什么好的理由在两个地方都添加宝石(RVM宝石集和宝石文件)
- 如果没有,为什么RubyMine要警告我
- 有没有什么好的理由在两个地方都添加宝石(RVM宝石集和宝石文件)
gemset是附带的,Gemfile绝对是声明依赖关系的地方。你把这些宝石存放在哪里取决于你。
听起来Bundler被配置为将它们存储在项目本地路径中,但您希望它们位于gemset中。Bundler在某个时刻通过运行bundle install --path vendor/bundle/gems
获得了该配置。它将该配置存储在project_dir/.bundle/config
:的项目配置文件中
BUNDLE_PATH: vendor/bundle/gems
我不熟悉Rubymine,但如果您使用Bundler(即bundle exec rails server
)运行Rails服务器,则可以忽略该警告。Bundler将正确加载Gemfile中列出的宝石。
如果您想使用Bundler缓存的gemset而不是,您只需从Bundler配置文件中删除该行,然后用bundle install
重新安装您的gem。
- 如果没有,为什么RubyMine要警告我
我的猜测是,Rubymine没有阅读Bundler项目配置(在project_path/.bundle/config
中),也不了解gem的安装位置。
您(或者如果您在团队中工作,您团队中的某个人)曾经完成过bundle install
并指定了安装文件夹。在您的案例中为vendor/bundle/gems
。Bundle会记住这个设置,并且所有对Bundle命令的下一次调用都将使用相同的路径。
这样做有一个很好的理由:您的应用程序文件夹将包含所有需求,并且更容易重新分发(例如)。
现在,如果您希望该捆绑包在正常位置安装您的宝石,您可以执行以下操作:
- 运行将使用默认位置的
bundle install --system
- 或者:bundle将其设置存储在配置文件中,我认为
.bundle/config
,您可以也检查一下那个。通常不需要,因为bundle install --system
会设置再次正确 - 然后可以安全地删除
vendor/bundle/gems
文件夹
不,出了问题,vendor/bundle下不应该有任何东西,应该都在~/.rvm/gems下/ruby-2.0.0-p247@myApp也许~/.rvm/宝石/ruby-2.0.0-p247@global假设.rvmrc(或.ruby版本)设置正确。
"gem-env"是什么样子的?还有"bundle env"?
所以这只花了我3天的时间,因为我在这里发现的其他东西都没有帮助。我还通过RubyMine同时运行多个项目(以及不同的版本),因此设置我的GEM_PATH和从命令行启动对我来说不起作用。我将IntelliJ与RM插件一起使用,这应该在RM单机版上起作用。
Bundler似乎将自定义gem或自定义repos中的gem安装在与rubygems或github中的gems不同的目录中。
/用户/YOURUSER/.rvm/environments/ruby-{version}\@yourgemset/bundler/gems
我没能修复的一件事是在GEMFILE中,我有一些自定义的git_sources,rubymine突出显示了这些,并警告我它在我的捆绑包中找不到gem(你可以忽略这个警告;除非gem根本没有安装):
gem"somegem",custom_git:"用户/回购"
突出显示,警告为"在SDK中找不到Gem x"
但是Bundler安装了它,ruby能够加载它
#TLDR:让RUBYMine找到额外宝石并出现在外部库中的步骤
- vim~/.rvm/environments/ruby-{您的verion在这里}\@{你的gemset}
- 将bundler gems路径添加到GEM_path条目
export GEM_PATH='/Users/YOURUSER/.rvm/gems/ruby-{version}@yourgemset/bundler/gems:{其余}'
- 保存文件
- 重新启动RubyMine/InIntelliJ,重新打开您的项目(如果未自动打开)
- 打开
Project Structure
对话框>Platform SDKs
>选择正在使用的GEMSET - 将
/Users/YOURUSER/.rvm/environments/ruby-{version}@yourgemset/bundler/gems
添加到类路径 - 点击OK,然后重新打开
Project Structure
对话框>Project Settings
>Project
- 您的项目可能没有SDK所以请再次选择您正在使用的SDK并点击OK
- RM/IJ现在将重新索引文件
- 完成后,任何损坏/缺失的检查链接现在都应该得到修复。你应该能够反省你的宝石
在上面的说明中,当您运行捆绑包安装(从终端或RM)时,它可以成功工作,并且您已经正确设置了RVM,并且已经创建了gemset
我希望这能有所帮助!让我知道我是否应该澄清任何事情(快乐NYE)