объяснение сценария ruby, пожалуйста - PullRequest
0 голосов
/ 14 февраля 2012

я ничего не знаю о 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

вот мой тест 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> 

спасибо

Ответы [ 2 ]

0 голосов
/ 14 февраля 2012

Я не уверен, что вы не понимаете ... Вы можете быть более конкретным?

Но бит rescue - это пункт, относящийся к begin ранее. Это как try / catch в Java, если для вас это что-то значит.

Это означает, что «попробуйте выполнить все действия между begin и end, но если BundlerError произойдет, то сделайте это, и если возникнет ошибка Interrupt, сделайте это»

Это отвечает на ваш вопрос?

0 голосов
/ 14 февраля 2012

Он пытается запустить интерфейс командной строки, и если он получает ошибку BundlerError или прерывается, он напечатает трассировку стека и выйдет с кодом состояния.Запустите тот же код из irb в каталоге с Gemfile и посмотрите, что получится.Это будет выглядеть так, как если бы вы сделали bundle install из командной строки.


$ 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...