大约两个月前,我们开始使用Rollbar通知我们Web应用程序中的各种错误.从那时起,我们偶尔会遇到错误:
ResizeObserver loop limit exceeded
令我困惑的是我们没有使用ResizeObserver
,我调查了唯一一个我认为可能是罪魁祸首的插件,即:
但它似乎也没有使用ResizeObserver
.
令人困惑的是,这些错误消息自1月以来一直在发生,但ResizeObserver
最近才向Chrome 65添加了支持.
给我们这个错误的浏览器版本是:
所以我想知道这是否可能是一个浏览器错误?或者可能是一个与实际无关的错误ResizeObserver
?
如何在开发环境中报告错误时禁用rollbar gem?我只想从暂存和制作中获取错误,但我没有在Rollbar网站上的文档中找到它.
我使用ActionCable实现了一个实时聊天系统.它可以工作,但我不断从Rollbar获取/cable
生产中的端点(Heroku)的异常通知.
2017-07-18T15:36:54.738588+00:00 heroku[router]: at=info method=GET path="/cable?user_id=63191&client=Gc-CvUfsgAW70KMpIBX25A&access_token=MoBTM2jF9wTwqblMsXQcVA" host=my-api.herokuapp.com request_id=b6cc263c-19e4-4207-8ce4-65ed6a130133 fwd="61.55.27.1" dyno=web.1 connect=0ms service=1727122ms status=101 bytes=22232 protocol=https
Run Code Online (Sandbox Code Playgroud)
请注意,它花了1727122ms.如果websocket处于活动状态,那就不足为奇了,但即使客户端已停止执行任何操作,它似乎也会保持打开状态.我是否在ActionCable配置错误,或者这是预期的?我应该在Rollbar中禁止错误通知吗?
我在生产服务器上为我的Rails 4应用程序记录了一个奇怪的错误:
ActionController::RoutingError: No route matches [GET] "/sign_up"
Run Code Online (Sandbox Code Playgroud)
这显然令人担忧,因为这意味着新用户无法注册.但是,如果我访问该URL,无论是通过手动输入,还是通过单击主页上的按钮,我都可以看到注册页面.
没有重定向,URL栏中的URL保持不变.
这是有问题的路线:
devise_scope :identity do
get 'sign_in', :to => 'devise/sessions#new'
get 'sign_up', :to => 'devise/registrations#new'
get 'sign_out', :to => 'devise/sessions#destroy'
end
Run Code Online (Sandbox Code Playgroud)
由于主题黑客攻击,我们主页上的按钮是一个用GET提交的表单.我认为这可能是一个问题,但日志显示它正确接收GET请求.
这里发生了什么?我应该从哪里开始寻找诊断?
UPDATE
通过我们主页上的黑客,我的意思是,由于<a class="btn...
导航器不支持导航栏,我们使用方法GET的表单使用它支持的按钮类型 - 所以从服务器的角度来看,用户仍在发送单击该按钮时获取GET/sign_up.这个按钮只是为了让他们进入/ sign_up页面(registration_controller #new),这不是他们按下提交注册表单及其所有细节的按钮.
(注册表单本身正常,即发送POST)
为了清楚起见,我已经手动完成了整个注册过程,并且它可以正常工作.我从来没有得到404.当我进行漫步时,日志消息不会出现.
这是相关的部分 rake routes
Prefix Verb URI Pattern Controller#Action
new_identity_session GET /identities/sign_in(.:format) devise/sessions#new
identity_session POST /identities/sign_in(.:format) devise/sessions#create
destroy_identity_session DELETE /identities/sign_out(.:format) devise/sessions#destroy
cancel_identity_registration GET /identities/cancel(.:format) identities/registrations#cancel
identity_registration POST /identities(.:format) identities/registrations#create
new_identity_registration GET /identities/sign_up(.:format) identities/registrations#new
edit_identity_registration GET /identities/edit(.:format) identities/registrations#edit
PATCH …
Run Code Online (Sandbox Code Playgroud) 我刚刚将Rails应用程序更新为5.2,并将其配置为使用新config/credentials.yml.enc
文件。
当我尝试部署时,出现以下错误:
NameError: uninitialized constant Rails
/Users/me/Documents/project/config/deploy.rb:27:in `<top (required)>'
Run Code Online (Sandbox Code Playgroud)
这指向我config/deploy.rb
文件中的这一行:
set :rollbar_token, Rails.application.credentials[:rollbar_token]
Run Code Online (Sandbox Code Playgroud)
因此看来,在capistrano运行时,它无权访问Rails.application.credentials
。
你们都如何处理?我有一些主意...
ENV
变量
Rails.application.credentials
capistrano ruby-on-rails capistrano3 ruby-on-rails-5 rollbar
我看到Mike建议使用错误服务报告sidekiq作业期间发生的错误:https: //www.mikeperham.com/2013/08/25/please-use-an-error-service
还有这个宝石,看起来它添加了一个中间件来做到这一点:https://github.com/allenwei/sidekiq-rollbar
但据报道该宝石有一个问题,表明Sidekiq已经这样做了.
有谁知道答案是什么?如果Rollbar配置为处理Rails项目中的异常,Sidekiq会自动报告在作业期间通过Rollbar发生的错误吗?或者我必须写一些东西,或使用宝石来做到这一点?
我知道Rollbar可以使用Sidekiq来提供一个队列 - 当我试图谷歌寻找答案时,这只会混淆问题.
我在Phoenix应用程序中遇到过时警告System.stacktrace/0 outside of rescue/catch clauses is deprecated. If you want to support only Elixir v1.7+, you must access __STACKTRACE__ inside a rescue/catch. If you want to support earlier Elixir versions, move System.stacktrace/0 inside a rescue/catch
。
事实是,我按照他们的文档中所述使用Rollbax:将Rollbax.report(:error, ArgumentError.exception("oops"), System.stacktrace())
我正在执行的每个case语句包装在try / rescue块中感觉有点奇怪。例如这个:
case (SOME_URL |> HTTPoison.get([], [ ssl: [{:versions, [:'tlsv1.2']}] ])) do
{:ok, %HTTPoison.Response{status_code: 200, body: body}} ->
Poison.decode!(body, [keys: :atoms])
{:ok, %HTTPoison.Response{status_code: 404}} ->
Rollbax.report(:error, :not_found, System.stacktrace(), %{reason: "Not found"})
{:ok, %HTTPoison.Response{status_code: 503}} ->
{:error, :ehostunreach}
{:error, …
Run Code Online (Sandbox Code Playgroud) 我的类中的逻辑有时会Rollbar.silenced
用来忽略某些异常(因此它们不会被报告)。
我正在尝试编写一个测试,以确保 rollbar 实际报告错误。
it 'does not mute rollbar' do
expect(Rollbar).not_to receive(:silenced)
expect(Rollbar).to receive(:error).with(any_args).and_call_original
expect { query }.to raise_error(unknown_exception)
end
Run Code Online (Sandbox Code Playgroud)
不幸的是,在报告无法挽救的错误时:error
,rollbar 不使用 in 、等方法。:critical
:warning
我看到 report_exception_to_rollbar
和call_with_rollbar
内翻车源代码被包裹着Rollbar.scoped
。
所以我尝试用以下方法测试它:
expect(Rollbar).to receive(:scoped).with(any_args).and_call_original
但它也告诉我:
Failure/Error: expect(Rollbar).to receive(:scoped).with(any_args).and_call_original
(Rollbar).scoped(*(any args))
expected: 1 time with any arguments
received: 0 times with any arguments
Run Code Online (Sandbox Code Playgroud)
如何确保异常被 rollbar 捕获并使用 rspec 进行测试?
为了使用服务Rollbar,必须禁用用于回溯符号化的位码。我还必须将dSYM文件上传到Rollbar。但是,禁用位码时,我在哪里可以得到dSYM文件?通常,我可以在iTunes connect中下载它们(但似乎只有在启用了位码的情况下才能在iTunes connect中下载它们,否则我错了吗?)。如果禁用,则看不到任何下载链接。
我们有一个网站(.Net/jquery/Bootstrap 4),使用Rollbar记录Javascript错误.Rollbar正在记录间歇性Javascript错误,并显示消息"Not a Product".对于跟踪,它仅包括:
File "(unknown)" line (unknown) col 0 in [anonymous]
Run Code Online (Sandbox Code Playgroud)
该错误仅发生在Windows和Mac 上的Chrome 60,61和62上.我们的客户信息和遥测不会暴露任何可能负责的浏览器扩展,但我不知道如何排除这一点.有没有办法解决这个问题,或者我们是否必须假设它是Chrome扩展程序,除非它出现在其他客户端上?
rollbar ×10
heroku ×2
actioncable ×1
aurelia ×1
capistrano ×1
capistrano3 ×1
devise ×1
dsym ×1
elixir ×1
ios ×1
javascript ×1
rspec ×1
ruby ×1
sidekiq ×1
traceback ×1