Ruby on rails 请解释一下ruby脚本

Ruby on rails 请解释一下ruby脚本,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我对ruby一无所知,谁能帮我解释一下这个脚本在做什么 #!/usr/bin/env ruby begin require '/usr/lib/ruby/gems/1.9.1/gems/bundler-1.0.22/lib/bundler' # Check if an older version of bundler is installed(this part i understand) $:.each do |path| if path =~ %r'/bu

我对ruby一无所知,谁能帮我解释一下这个脚本在做什么

 #!/usr/bin/env ruby
 begin
    require '/usr/lib/ruby/gems/1.9.1/gems/bundler-1.0.22/lib/bundler'
    # Check if an older version of bundler is installed(this part i understand)
    $:.each do |path|
    if path =~ %r'/bundler-0.(\d+)' && $1.to_i < 9
       err = "Please remove Bundler 0.8 versions."
       err << "This can be done by running `gem cleanup bundler`."
       abort(err)
    end
  end
  #it is from here that i dont understand
  require '/usr/lib/ruby/gems/1.9.1/gems/bundler-1.0.22/lib/bundler/cli'
  Bundler::CLI.start
  rescue Bundler::BundlerError => e
    Bundler.ui.error e.message
    Bundler.ui.debug e.backtrace.join("\n")
  exit e.status_code
  rescue Interrupt => e
    Bundler.ui.error "\nQuitting..."
    Bundler.ui.debug e.backtrace.join("\n")
    exit 1
  end

谢谢,它正在尝试启动bundler CLI,如果出现bundler错误或中断,它将打印stacktrace并以状态代码退出。从带有Gemfile的目录中的irb运行相同的代码,看看会发生什么。如果您从命令行执行
捆绑安装
,就会出现这种情况



我不知道你不明白什么。。。你能说得更具体些吗

但是
rescue
位是与前面的
begin
相关的子句。这就像Java中的try/catch,如果这对您有意义的话

这意味着,“尝试执行
开始
结束
之间的所有操作,但如果发生
捆绑错误
,则执行此操作,如果发生
中断
错误,则执行此操作”


这是否回答了您的问题?

是的,我得到了错误:/usr/lib/ruby/gems/1.9.1/gems/bundler-1.0.22/bin/bundle:14:in'rescue in':未初始化常量bundler::bundler error(namererror)这就是bundler cli不想启动的原因吗?谢谢
require'/usr/lib/ruby/gems/1.9.1/gems/bundler-1.0.22/lib/bundler'
大概就是失败的那一行。该位置是否有文件?是的,一个名为bundle的可执行文件:-rwxr-xr-x 1 root 699 2012-02-14 09:48 bundle如果
需要“bundler”
失败,则需要运行
gem install bundler
。您还需要确保路径在您的系统上有意义。而且没有理由从
bundler
目录运行它,如果您想让它做任何事情,目录中需要有一个
Gemfile
,就像rails应用程序一样。你到底想干什么?你为什么要这样做?我想弄明白为什么我的项目不想使用jenkins构建。在jenkins中,当您单击左侧的配置时,它会打开右侧的配置设置。如果向下滚动到build部分下,将有一个脚本正在运行。构建失败。如果现在转到失败构建的控制台输出,它会显示:bundle安装路径vendor/gems--binstubs/tmp/hudson4637677486807131064.sh:1:bundle:未找到,因此构建失败。sudo gem install bundler为helloises提供了:[sudo]密码:成功安装bundler-1.0.22 1 gem installed Yekes我不知道该怎么做我从未使用过这种东西。这超出了我的范围。请告诉我该怎么做:使用Gemfile从目录中的irb运行相同的代码?@charlie_cat请参阅编辑后的答案。您进入一个包含GEM文件的目录,键入
irb
,需要所需的内容,然后键入要运行的代码。但是,如果它“超出了您的范围”,您应该花时间了解您正在做什么,以及为什么。我在我的主要帖子中发布了我的输出:)
/usr/lib/ruby/gems/1.9.1/gems/bundler-1.0.22/bin$ irb
irb(main):001:0> require 'bundler'
LoadError: no such file to load -- bundler
from (irb):1:in `require'
from (irb):1
from :0
irb(main):002:0> require 'bundler/cli'
LoadError: no such file to load -- bundler/cli
from (irb):2:in `require'
from (irb):2
from :0
irb(main):003:0> Bundler::CLI.start
NameError: uninitialized constant Bundler
from (irb):3
from :0
irb(main):004:0> 
$ irb
ruby-1.9.3-p0 :001 > require 'bundler'
 => true 
ruby-1.9.3-p0 :002 > require 'bundler/cli'
 => true 
ruby-1.9.3-p0 :003 > Bundler::CLI.start