2

Rubyでファイルの要求を条件付きでスキップできますか?

begin
  require 'aws-sdk'
rescue LoadError
  puts "aws-sdk gem not found"
end

namespace :db do
  desc "import local postgres database to heroku. user and database name is hardcoded"
  task :import_to_heroku => [:environment, "db:dump_for_heroku"] do
    # code using aws-sdk gem
  end
end

rescue LoadError
上記のコードでは、コード全体を条件付きでラップした後、Ruby に読み取らないように指示できますが、それはエレガントではありません。私は試しnextてみreturnました。

編集:同じファイルに「さらに」ルビーコードをロードすることを条件付きでスキップできますか? に新しい質問を追加しました。. ごめん。この質問を適切にしなかった

4

3 に答える 3

7

exitログの後に追加するかもしれません:

begin
  require 'aws-sdk'
rescue LoadError
  puts "aws-sdk gem not found"
  exit
end

namespace :db do
  desc "import local postgres database to heroku. user and database name is hardcoded"
  task :import_to_heroku => [:environment, "db:dump_for_heroku"] do
    # code using aws-sdk gem
  end
end

また、abort 関数は、同じ呼び出しでログに記録して終了することです。

abort("aws-sdk gem not found")
于 2013-01-25T13:04:34.510 に答える
1

私は LoadError を救出しましたが、LoadError が実行された場合、それ以上のコードは実行されないようにしたいと考えています。与えられた例では、rake タスク db:import_to_heroku を呼び出すべきではありません

次に、次のようにします。

begin
  require 'aws-sdk'

  namespace :db do
    desc "import local postgres database to heroku. user and database name is hardcoded"
    task :import_to_heroku => [:environment, "db:dump_for_heroku"] do
      # code using aws-sdk gem
    end
  end
rescue LoadError
  puts "aws-sdk gem not found"
end
于 2013-01-25T14:51:36.823 に答える