Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何激活或设置默认耙?_Ruby_Rake_Rvm_Bundler - Fatal编程技术网

Ruby 如何激活或设置默认耙?

Ruby 如何激活或设置默认耙?,ruby,rake,rvm,bundler,Ruby,Rake,Rvm,Bundler,我见过很多 You have already activated rake 0.9.x, but your Gemfile requires rake 0.x.x 错误 当然,可以通过以下方法(临时或始终)解决这些问题 bundle exec rake 上述方法可行,但您始终必须键入bundle exec 它也可以通过以下方式解决: bundle update gem uninstall unwanted_rake_version 但是bundle update也会更新您的其他gems

我见过很多

You have already activated rake 0.9.x, but your Gemfile requires rake 0.x.x
错误

当然,可以通过以下方法(临时或始终)解决这些问题

bundle exec rake
上述方法可行,但您始终必须键入bundle exec

它也可以通过以下方式解决:

bundle update
gem uninstall unwanted_rake_version
但是bundle update也会更新您的其他gems

有人说这可以通过

bundle update
gem uninstall unwanted_rake_version
是的,可以安装不需要的rake,但它仍然标记为已激活,因此仍然会出现错误


一种解决方案是在GEM文件中明确指定rake版本,但这不是问题所在。它是关于如何设置默认的rake版本,或者如何在rvm或其他类型的ruby安装中激活该特定版本?

可以通过提供可选的第一个参数(即gem版本)来激活较新版本的rake

$rake 0.9.2

或者,如果您有旧版本的rake,则可以手动更新rake脚本以包含此参数(或指定您想要的任何特定版本)

rake脚本通常位于/usr/bin/rake(或者~/.rvm/gems/ruby-#{ruby name}/rake,如果使用rvm)。并指示在解析参数之前要加载的gem版本

在我的系统上看起来是这样的

$ cat ~/.rvm/gems/ruby-1.9.2-p180/bin/rake

#!/home/tomcat/.rvm/rubies/ruby-1.9.2-p180/bin/ruby
#
# This file was generated by RubyGems.
#
# The application 'rake' is installed as part of a gem, and
# this file is here to facilitate running it.
#

require 'rubygems'

version = ">= 0"

if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
  version = $1
  ARGV.shift
end

gem 'rake', version
load Gem.bin_path('rake', 'rake', version)
重要的一点是
gem'rake',version
更改
version
将强制rake到特定的版本系统/rvm范围


关于更多信息,Katz’很好地解释了二进制文件是如何在rubygems下运行的。当我遇到这个错误时,它通常是在依赖不同版本的rake的项目之间工作的结果。一个简单的解决方法是

gem uninstall rake
然后在您的项目目录中(假设您正在使用Bundler)


我总是先卸载rake,命令如下:

gem uninstall rake -v=version
然后安装另一个版本

gem install rake -v=version

作为旁注。Bundle exec是更“犹太”的策略。如果修改rake脚本,rubygems可以(也可能会)覆盖它。您可能想在安全的地方引用副本,请参见
bin_path
的语法如下:
bin_path(name,exec_name=nil,*requirements)
但我仍然不明白
exec_name
的目的是什么,即为什么命令不只是
Gem.bin_path('rake',version)
?第一个参数是gem的名称,第二个参数是该gem中可执行文件的名称(如果为nil,则为默认值)。由于存在三个参数,因此必须指定所有参数才能同时指定版本。看,我不明白。简单地
bundle
什么?它不需要任何参数吗?默认的bundle命令是
install
我昨天才知道。谢谢