问题标签 [rescue]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby-on-rails - 如何在 Ruby 中捕获和忽略 ActiveRecord::RecordNotUnique 异常
我每天运行 ruby 脚本作业,用于将数据从一个表加载到另一个表,直到在源表中找到重复的键记录,因为该表没有约束。我的目标表拒绝了这些记录,因为目标表对列(head_date、center_id、site_url)有主键约束。我的程序刚刚停止并在命令行上显示以下错误。:-(
我可以期望源表有其他像这样的讨厌的记录。捕获此活动记录异常后,如何继续处理并移至下一条记录?
以下是我的更新/插入的代码:
ruby - 红宝石在线救援
我最近了解到,您可以rescue
在一行代码上使用,以防该行出现问题(请参阅http://www.rubyinside.com/21-ruby-tricks-902.html提示 #21)。我有一些过去看起来像这样的代码:
使用该rescue
方法,我相信我可以将该代码更改为以下内容:
如果在访问哈希的任何级别引发 nil 异常,它应该被救援捕获并给我'',这就是我想要的。nil
如果这是所需的行为,我也可以选择将名称设置为。
这样做有什么已知的危险吗?我问是因为这似乎好得令人难以置信。我有很多丑陋的代码,我很想摆脱它,看起来就像第一个代码示例。
ruby-on-rails - 如何从 Rails 4 中的 ActionDispatch::ParamsParser::ParseError 中救援
Rails 4 添加了一个异常ActionDispatch::ParamsParser::ParseError异常,但由于它在中间件堆栈中,因此它似乎无法在正常的控制器环境中被拯救。在 json API 应用程序中,我想以标准错误格式响应。
这个要点展示了一种插入中间件来拦截和响应的策略。按照这种模式,我有:
应用程序.rb:
中间件是:
如果我在没有中间件的情况下运行测试,我会得到(规范):
这正是我所期望的(我无法救援的 ParseError)。
现在,在上面的中间件中添加的唯一更改是:
并且日志显示标准控制器操作正在执行并返回正常响应(尽管因为它没有收到任何参数,所以它没有更新任何东西)。
我的问题:
如何从 ParseError 中拯救并返回自定义响应。感觉就像我在正确的轨道上,但并不完全在那里。
我无法弄清楚为什么在引发和救援异常时,控制器操作仍会继续进行。
非常感谢帮助,--Kip
ruby-on-rails - 使用 Ruby Twitter gem 捕获错误,使用 delay_job 缓存方法:我做错了什么?
我在做什么
我在我的应用程序中使用了twitter gem(Twitter API 的 Ruby 包装器),该应用程序在Heroku上运行。我使用Heroku 的调度程序定期运行缓存任务,这些任务使用 twitter gem 来更新特定用户的转发列表。我也在使用delayed_job,所以调度程序调用了一个rake任务,它调用了一个“延迟”的方法(参见下面的scheduler.rake)。该方法循环通过“身份验证”(对于通过我的应用程序对 twitter 进行身份验证的用户)来更新每个授权用户在应用程序中的转发缓存。
我的问题
我在做什么错?例如,由于我使用的是 Heroku 的调度程序,delayed_job 是多余的吗?此外,您可以看到我没有发现(拯救)任何错误。因此,如果 Twitter 无法访问,或者用户的身份验证令牌已过期,那么一切都会阻塞。这显然是愚蠢和可怕的,因为如果出现错误,整个事情就会窒息并最终创建一个失败的延迟作业,这会给我的应用程序带来连锁反应。我可以看到这很糟糕,但我不确定最好的解决方案是什么。我应该如何/在哪里发现错误?
我将把我的所有代码(从调度程序到被调用的方法)放在我的一个缓存方法中。我真的只是希望有一个项目符号列表(可能还有一些代码或伪代码)来谴责我糟糕的编码实践并告诉我在哪里可以改进。
我已经看到了这个 SO question,它对开始/救援块有一点帮助,但我可以使用更多的指导来捕捉错误,以及更高级别的“这是一个很好的方法吗?” 飞机。
代码
Heroku 调度程序工作:
scheduler.rake (在我的应用程序中)
Tweet.rb、update_retweet_cache 方法:
User.rb,推特方法:
注意:当我发布这篇文章时,我注意到我在“cache_retweets_for_all_auths”方法中找到了所有“twitter”身份验证,然后调用“User.twitter”方法,该方法专门限制为“twitter”身份验证。这显然是多余的,我会修复它。
ruby - 我可以在开始救援结束块内断言吗?
我有一些我正在测试的东西,如果它失败了,我会知道它的工作原理。有没有比我在下面的示例中更好的方法来使用测试单元在 ruby 中进行编码?
这似乎很笨拙,有没有更好的方法来写这个?我希望 Method.shouldFail 总是会失败,但它可能不会。我会假设在最后一个救援块中 e.code 应该总是 400 但它可能是别的东西。
ruby - 在 Watir 出现超时错误后重试测试站点
我正在浏览一个站点列表,并使用 Watir 在每个页面的源代码中查找每个站点。但是,在大约 20 或 30 个站点之后,浏览器在加载某个页面时超时,它破坏了我的脚本,我收到了这个错误:
rbuf_fill:执行已过期(Timeout::Error)
我正在尝试实现一种方法来检测它何时超时,然后从它停止但遇到问题的地方重新开始测试站点。这是我的代码:
ruby - 异常仅在行尾使用 `rescue` 捕获,但在使用 `begin rescue` 块时不会捕获
我有一个失败的声明:
现在以下内容抑制了错误,然后我可以检查nil
但是,当我执行以下操作时,初始错误会直接被抛出到 UI 并且我没有得到details
异常。
我确信我必须遗漏一个愚蠢的细节,但我似乎无法在这里发现问题。那么为什么不rescue
调用块呢?
更新:我得到的错误是:
ruby - 在使用外部 gem 时捕获异常
我编写了一个使用外部 ruby gem 的程序。由于我对此进行了许多不同的操作,因此我希望能够全面挽救和处理异常,而不是每次调用方法时都执行它。
做这个的最好方式是什么?
我应该编写自己的方法来简单地调用外部 gem 并拯救异常吗?还是有另一种方法来做类似“每当程序中的任何地方出现这种类型的异常时,都以这种方式处理”?
我知道如果我编写了外部 gem 代码,我可以添加这样的错误处理,但这是不可行的。
ruby-on-rails - 抢救模块内特定类型的所有错误
我有一个模块,我在其中执行项目的所有加密/解密任务。我想捕获OpenSSL::Cipher::CipherError
此模块中发生的任何异常,以便我可以处理它们。
是否可以做类似的事情
在模块内部?
ruby - 重构嵌套的救援语句
当涉及到不同错误的连续过滤时,Rescue 语句可以很好地发挥作用:
但是,当涉及到使用不同参数来挽救相同的错误时,这就是我在代码中使用的:
不用说,我不喜欢它。难道没有更聪明的方法来做到这一点吗?