0

この前に 2 つのことを述べさせてください。

1) Stack Overflow と Google でこの回答を検索しました。
2) 今日は、Ruby をいじろうとした最初の日です。

よしよし。そこで、Homebrew を使用して 1 つのコマンドで MySQL、PHP、Redis、および xdebug をインストールするために使用できる Ruby スクリプトを作成しようとしています。このコマンドは次のようになります。

./phpserver.rb --with-php --with-mysql --with-xdebug --with-redis

ただし、上記を実行すると「引数がありません: --with-redis」が表示されます。「--with-redis=1.0」を使用して Redis のバージョンを強制するか、オプションを含めない場合、このエラーはなくなります。

これらのオプションはどれも必須ではありません (はい、スクリプトがまだゼロのオプションを処理していないことはわかっています)。

私は完全に困惑しています。あなたが私をリンクしたいという明白な答えがあれば、それは問題ありません. Ruby の知識が不足していることを前もってお詫びします。これは、私が最初に Ruby に飛び込むのを助けるためのサイド プロジェクトです。

これが私のスクリプトです:

#!/usr/bin/ruby
prefix = `brew --prefix`.gsub("\n", "");
$LOAD_PATH << prefix+"/Library/Homebrew/"

# Required scripts
require 'optparse'
require 'global'

# Handle Ctrl+C
trap('INT') {
  opoo "Installation failed. Please try again!"
  exit!
}

# Start big try statement
begin

# Options
options = {}
OptionParser.new do |opts|
  banner = "\nUsage: phpserver.rb [options]\n\n"

  opts.banner = banner
  opts.on("--with-mysql=VERSION", "Install MySQL with VERSION",
          "Run `brew versions mysql` to see available versions.") do |v|
    options[:mysql] = v
  end
  opts.on("--with-php", "Install PHP") do |v|
    options[:php] = v
  end
  opts.on("--with-xdebug", "Install xdebug for PHP debugging") do |v|
    options[:xdebug] = v
  end
  opts.on("--with-redis=VERSION", "Install Redis with VERSION",
          "Run `brew versions redis` to see available versions.") do |v|
    options[:redis] = v
  end
  opts.on_tail("-h", "--help", "Show this message") do
    puts opts
    puts "\n"
    exit
  end
end.parse!

# Need to run brew update first?
ohai "Making sure Homebrew is up to do."
versions = `brew versions --compact a2ps`
if versions.include? "Please `brew install git` first"
  ohai "Need to install Git before the script can run; we'll do that for you."
  system 'brew install git'

  ohai "Now we need to pull down the Homebrew repository, we'll do that for you as well."
  system 'brew update'
elsif versions.include? "Please `brew update"
  ohai "Homebrew needs to be updated, we'll take care of that."
  system 'brew update'
end

# Tap them kegs!
if !File.directory?("#{prefix}/Library/Taps/josegonzalez-php")
  ohai "Tapping josegonzalez/homebrew-php"
  if system 'brew tap josegonzalez/homebrew-php'
    oh1 "Success!"
  else
    opoo "Failed to tap the keg. Please report this."
  end
else
  oh1 "The josegonzalez/homebrew-php keg has already been tapped. Continuing..."
end

# Installing MySQL?
if options[:mysql] != nil
  ohai "Installing MySQL."

  revert = false
  command = false
  if options[:mysql] != true
    versions = `brew versions mysql`

    errors = []
    versions.each do |version|
      if version.start_with? options[:mysql]
        revert = true
        command = version.gsub(options[:mysql], "").gsub(prefix+"/", "").strip!
        break
      else
        errors << "- "+version
      end
    end

    if command == false
      error = "Invalid MySQL version. The available versions for MySQL are:\n\n"
      error += errors.join()
      opoo error
    else
      %x(cd #{prefix} && #{command})
    end
  end

  system 'brew install mysql'

  if revert
    command = command.split(" ").last
    %x(cd #{prefix} && #{command})
  end
end

# Installing PHP?
if options[:php] != nil
  ohai "Installing PHP."

  install = 'brew install php';
  if options[:mysql] != nil
    install += ' --with-mysql';
  end
  if options[:php] == true or options[:php].to_f < 5.4
    install += ' --with-suhosin';
  end

  system install
end

# Installing xdebug?
if options[:xdebug] != nil
  ohai "Installing xdebug."
  system 'brew install xdebug-php'
end

# Installing Redis?
if options[:redis] != nil
  ohai "Installing Redis."
  system 'brew install redis'
end

rescue OptionParser::NeedlessArgument
  opoo "Invalid arguments. Run `./phpserver.php -h` for help."
rescue StandardError => message
  if !["exit"].include? message
    opoo message
  end
end 
4

1 に答える 1

4

あなたは同様に欠落している議論についての不満を得るはずです--with-mysql細かいマニュアルから:

ロングスタイルスイッチ:

必須、オプション、または引数なしのロングスタイルスイッチを指定します。これは、次の形式の文字列です。

"--switch=MANDATORY" or "--switch MANDATORY"
"--switch[=OPTIONAL]"
"--switch"

したがって、使用したい--with-mysql[=VERSION]ものと同様のもの:

opts.on("--with-mysql[=VERSION]", "Install MySQL with VERSION",
        "Run `brew versions mysql` to see available versions.") do |v|
  options[:mysql] = v
end
#...
opts.on("--with-redis[=VERSION]", "Install Redis with VERSION",
        "Run `brew versions redis` to see available versions.") do |v|
  options[:redis] = v
end

options[:redis] = nilあなたが言うならそれはあなたに与えるでしょう--with-redisそしてoptions[:redis] = '1.0'あなたが言うなら--with-redis=1.0

于 2012-05-09T06:26:45.853 に答える