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