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

在上面的代码中,我可以要求 Ruby 在rescue LoadError
我可以将整个代码包装在条件中之后不要阅读,但这很不优雅。我试过nextreturn

编辑:在我可以有条件地跳过在同一个文件中加载“更多”红宝石代码吗?. 对不起。没有正确地问这个问题

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("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 回答
0

新增“顶级回归”功能。

现在可以return在顶层使用关键字,正如您所说,在提出问题时它不起作用。在这里进一步讨论

于 2019-01-31T17:01:49.940 回答