什么bundle exec rake db:migrate意思?或者只是bundle exec rake <command>一般?
据我所知,bundle它负责维护Gemfile中的内容.我知道"exec"这个词是什么意思.我明白,rake你可以保留所有不同的脚本,我知道这db:migrate就是其中之一.我只是不知道这些话在一起做什么.为什么要bundle用来rake执行数据库迁移?
我使用RVM来管理Ruby版本.
在我的项目中,我使用Bundler来管理项目的宝石.
RVM也有gemsets.
gemset中的Gem与Bundler的gem没有关联.←这是对的吗?
我得出了这个结论,因为存储在不同位置的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(只是为了摆脱这个警告).
所以问题是:
我很难让RubyMine正确地看到我的宝石.我看到的问题是编辑器屏幕无法识别任何宝石的任何类,例如对于MyClass <ActiveRecord :: Base,我看到一个黄色警告:Cannot find 'ActiveRecord'.
我正在使用bundler,我为每个项目配置了我的宝石并安装在/some/project_dir/.bundle/gems中
我已经看到了这个错误:http://youtrack.jetbrains.com/issue/RUBY-14542,所以我试图通过启动RubyMine来解决这个问题,如下所示:
GEM_HOME="/some/project_dir/.bundle/gems/ruby/1.8" mine
我的RubyGems环境看起来是正确的 - 这是相关的提取:
....
Sdk Gem paths:
~/.rbenv/versions/ree-1.8.7-2012.02/lib/ruby/gems/1.8/gems
/some/project_dir/.bundle/gems/ruby/1.8/gems
~/.rbenv/versions/ree-1.8.7-2012.02/lib/ruby/gems/1.8/bundler/gems
/some/project_dir/.bundle/gems/ruby/1.8/bundler/gems
Gems used for 'project':
rails (bundled)
/some/project_dir/.bundle/gems/ruby/1.8/bundler/gems/rails-857c6ee62c05
rspec (bundled(1.3.2))
/some/project_dir/.bundle/gems/ruby/1.8/gems/rspec-1.3.2
Run Code Online (Sandbox Code Playgroud)
....
所以它似乎正在使用宝石的正确路径:
/some/project_dir:ls -1 /some/project_dir/.bundle/gems/ruby/1.8/gems
Ascii85-1.0.1
Ascii85-1.0.2
GeoRuby-1.3.3
abstract-1.0.0
....
Run Code Online (Sandbox Code Playgroud)
我看到Ruby SDK和Gems首选项窗格下列出的gem,但编辑器窗格无法识别其中的任何文件.
这似乎是一个类似的问题,但即使使用指定的解决方法,我仍然会看到问题.
更新:我从rails 2.3升级到rails 3.0(通过升级Gemfile并运行bundle install),我现在能够在编辑器中看到rails源,但没有其他宝石.使用:github =>指令安装Rails:
gem 'rails', :github => 'rails/rails', :branch => '3-0-stable'
Run Code Online (Sandbox Code Playgroud)
所以我认为这可能与它有关.
Cross发布到这个bug:http://youtrack.jetbrains.com/issue/RUBY-14542