使用RVM Gemsets& Bundler& RubyMine的

时间:2013-07-28 14:31:59

标签: ruby-on-rails rvm bundler gemset

我使用RVM来管理Ruby版本 在我的项目中,我使用Bundler来管理项目的宝石。

RVM也有宝石 gemset中的Gem与Bundler的gem没有关联。 ←这是正确的吗?
我得出了这个结论,因为宝石文件存储在不同的位置:
RVM gemset:~/.rvm/gems/ruby-2.0.0-p247@myApp
Bundler:[my_app_dir]/vendor/bundle/gems
所以app使用Bundler gems,而不是RVM gemset gems。

但是当我向我的Gemfile添加gem时,RubyMine IDE向我显示警告,这个gem不在RVM gemset中。所以我也将这个gem添加到RVM gemset中(只是为了摆脱这个警告)。

所以问题是:

  1. 有没有充分的理由在两个地方添加宝石(RVM Gemset和Gemfile)?
  2. 如果不是,那么为什么RubyMine会警告我这个?

4 个答案:

答案 0 :(得分:7)

  
      
  1. 有没有充分的理由在两个地方添加宝石(RVM Gemset和Gemfile)?
  2.   

gemset是偶然的,Gemfile绝对是声明依赖项的地方。存储这些宝石的地方取决于你。

听起来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。

如果您想使用Bundler缓存的gemset 而不是,您只需从Bundler配置文件中删除该行,然后使用bundle install重新安装您的宝石。

  
      
  1. 如果不是,那么为什么RubyMine会警告我这个?
  2.   

我的猜测是Rubymine没有阅读Bundler项目配置(在project_path/.bundle/config中)并且不了解宝石的安装位置。

答案 1 :(得分:2)

您(或者如果您在团队中工作,团队中的某个人)曾经做过bundle install并指定了一个安装文件夹。在您的情况下vendor/bundle/gems。 Bundle会记住此设置,并且bundle命令的所有下一次调用都将使用相同的路径。

有一个很好的理由这样做:你的应用程序文件夹将包含所有要求,并且更容易重新分配(例如)。

现在,如果您希望该捆绑包在正常位置安装您的宝石,您可以执行以下操作:

  • 运行bundle install --system,它将使用默认位置
  • 或者:bundle将它设置存储在配置文件中,我认为.bundle/config你可以 检查那一个。通常不需要,因为bundle install --system将设置它 再次正确。
  • 然后您可以安全地删除vendor/bundle/gems文件夹

答案 2 :(得分:1)

不,有什么不对,你不应该在vendor / bundle下有任何东西,它应该都在〜/ .rvm / gems / ruby​​-2.0.0-p247 @ myApp下,也许〜/ .rvm / gems / ruby -2.0.0-p247@global假设您的.rvmrc(或.ruby-version)设置正确。

“gem env”是什么样的?还有“捆绑环境”?

答案 3 :(得分:1)

所以这只花了我3天,因为我在这里找到的其他任何东西都没有帮助。我还同时通过RubyMine运行多个项目(以及不同的版本),因此设置我的GEM_PATH并从命令行启动对我来说不起作用。我使用带有RM插件的IntelliJ,这个在RM standalone上工作。

Bundler似乎在自定义存储库中安装自定义宝石或宝石,而不是来自rubygems或github的宝石。

  

/Users/YOURUSER/.rvm/environments/ruby- {version} \ @ yourgemset / bundler / gems

我无法修复的一件事是在GEMFILE中,我有一些自定义git_sources,而rubymine突出显示那些并给我警告,它无法在我的包中找到gem(你可以忽略这个警告;除非宝石根本没有安装):

  

gem' somegem',custom_git:' gituser / repo'

     

突出显示,警告为"无法找到Gem x ...在SDK'

然而Bundler安装了它,ruby能够加载它。

#TLDR:让RUBYMine找到额外宝石并显示在外部库中的步骤

  1. vim~ / .rvm / environments / ruby​​- {your-verion-here} \ @ {your-gemset}
  2. 将bundler gems路径添加到GEM_PATH条目

      

    导出GEM_PATH =' /Users/YOURUSER/.rvm/gems/ruby- {version} @ yourgemset / bundler / gems:{其余}'

  3.   
  4. 保存文件
  5.   
  6. 重新启动RubyMine / IntelliJ,重新打开项目(如果没有自动打开)
  7.   
  8. 打开Project Structure对话框> Platform SDKs>选择您正在使用
  9. 的GEMSET   
  10. /Users/YOURUSER/.rvm/environments/ruby-{version}\@yourgemset/bundler/gems添加到您的类路径
  11.   
  12. 点击OK,然后重新Project Structure对话框> Project Settings> Project
  13.   
  14. 您的项目可能没有SDK 因此请选择您再次使用的那个并点击OKAY
  15.   
  16. RM / IJ现在将重新索引文件
  17.   
  18. 您已完成,现在应修复任何损坏/缺失的检查链接。你应该能够反省你的宝石。
  19.   

         

    在上面的说明中,当您运行bundle install(从终端或RM)时,它可以成功运行,并且您已正确设置RVM,并且已创建gemset


    我希望这有帮助!让我知道我是否应该澄清任何事情(快乐的NYE)