ruby gem sets存在根本问题,其中像rake xxxx这样的命令可能会产生错误,因为命令可能使用rake的全局版本,而gemfile需要非常特定的版本。
我知道有两种方法可以缓解这个问题。
在rake and rails命令前使用bundle exec
。例如bundle exec rake db:migrate
在前面添加此命令可确保执行与当前包相关的命令,这意味着在运行bundle install
时创建的包。
使用RVM。使用RVM创建本地gemset的方法较少。首先,在这种情况下为新应用创建目录mkdir myapp
,cd myapp
然后运行rvm use ruby-2.3.0@myapp --ruby-version --create
以创建没有任何内容的本地gem集。现在,您可以运行gem install rails
和rails new .
来创建rails myapp,并使用您所在文件夹中的专用gem环境。
每次你自动cd到myapp目录时,额外的RVM都会交换到正确的gemset。
至于我理解这两种方法都有效,但是为什么你不使用上述方法之一有任何已知问题?
答案 0 :(得分:1)
不使用(2)的一个原因:如果其他人想要使用您的代码,他们将不得不为自己复制所有这些,而不是仅仅记住键入bundle exec
。他们之前可能从未见过(2),所以这可能是非平凡的。
答案 1 :(得分:1)
如果您是像我一样的RVM粉丝,我会为我开始的每个rails项目创建自己的gemset。这样我就可以更轻松地使用rake
和rails
命令,而无需每次都指定bundle exec
。
在共享代码时请记住,某些开发人员可能正在使用rbenv,或者根本不使用ruby版本管理器。确保每个人都满意并使用相同版本的ruby的一种方法是在项目目录(.ruby-version
和.ruby-gemset
)中提供两个附加文件,并在项目中跟踪它们。 / p>
.ruby-version
文件将包含您正在使用的ruby版本,例如2.4.1
。请注意,这与RVM和rbenv兼容,并将切换到正确的ruby版本。
.ruby-gemset
文件仅由RVM识别;因此,切换到您为项目设置的正确gemset。
这将使您的项目与使用rbenv的开发人员兼容,同时仍然让我们这些人使用RVM开心:)
考虑到所有这些注意事项,现在你应该更少关注人们是否使用bundle exec
了!