@danieljvdm/dev-kit 1.0.2 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -6
- package/package.json +1 -1
- package/skill-sources.jsonc +2 -33
- package/skill-sources.lock.json +15 -117
- package/skills/animate/LICENSE +21 -0
- package/skills/animate/NOTICE +10 -0
- package/skills/animate/SKILL.md +34 -0
- package/skills/animate/references/gestures.md +27 -0
- package/skills/animate/references/glossary.md +136 -0
- package/skills/animate/references/implementation.md +22 -0
- package/skills/animate/references/opportunities.md +18 -0
- package/skills/animate/references/principles.md +48 -0
- package/skills/animate/references/review.md +19 -0
- package/skills/cloudflare-workers/LICENSE +202 -0
- package/skills/cloudflare-workers/NOTICE +9 -0
- package/skills/cloudflare-workers/SKILL.md +26 -0
- package/skills/cloudflare-workers/references/durable-objects.md +68 -0
- package/skills/cloudflare-workers/references/sandbox.md +48 -0
- package/skills/cloudflare-workers/references/workers.md +63 -0
- package/skills/cloudflare-workers/references/wrangler.md +56 -0
- package/skills/design-ui/LICENSE +21 -0
- package/skills/design-ui/NOTICE +8 -0
- package/skills/design-ui/SKILL.md +29 -0
- package/skills/design-ui/references/appearance.md +22 -0
- package/skills/design-ui/references/components.md +33 -0
- package/skills/design-ui/references/exploration.md +50 -0
- package/skills/design-ui/references/libraries.md +39 -0
- package/skills/design-ui/references/themes.md +23 -0
- package/skills/dev-kit/SKILL.md +19 -38
- package/skills/dev-kit/references/cloudflare-worker-api.md +1 -1
- package/skills/dev-kit/references/skills.md +2 -2
- package/skills/effect-development/SKILL.md +27 -0
- package/skills/effect-development/agents/openai.yaml +4 -0
- package/skills/effect-development/references/api/index.md +32 -0
- package/skills/effect-development/references/api/schema-codecs.md +15 -0
- package/skills/{build-effect-apis/references → effect-development/references/api}/verification.md +10 -5
- package/skills/{effect-architecture-audit/SKILL.md → effect-development/references/architecture/index.md} +1 -6
- package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-client.md +8 -6
- package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-testing.md +7 -2
- package/skills/effect-development/references/atom/index.md +40 -0
- package/skills/{build-effect-clis/references → effect-development/references/cli}/entrypoints-and-testing.md +6 -2
- package/skills/effect-development/references/cli/index.md +39 -0
- package/skills/effect-development/references/setup.md +15 -0
- package/skills/open-pull-request/SKILL.md +10 -70
- package/skills/open-pull-request/references/evidence.md +22 -0
- package/skills/open-pull-request/references/explanation.md +21 -0
- package/skills/open-pull-request/references/publication.md +21 -0
- package/skills/sentry/LICENSE +202 -0
- package/skills/sentry/LICENSE-UPSTREAM +21 -0
- package/skills/sentry/NOTICE +14 -0
- package/skills/sentry/SKILL.md +33 -0
- package/skills/sentry/references/alert-payloads.md +105 -0
- package/skills/sentry/references/alerts.md +17 -0
- package/skills/sentry/references/artifacts.md +25 -0
- package/skills/sentry/references/auth-token.md +65 -0
- package/skills/sentry/references/concepts/ai-monitoring.md +131 -0
- package/skills/sentry/references/concepts/choosing-a-signal.md +78 -0
- package/skills/sentry/references/concepts/crons.md +50 -0
- package/skills/sentry/references/concepts/data-scrubbing.md +43 -0
- package/skills/sentry/references/concepts/errors.md +40 -0
- package/skills/sentry/references/concepts/logging.md +85 -0
- package/skills/sentry/references/concepts/metrics.md +49 -0
- package/skills/sentry/references/concepts/monitors.md +78 -0
- package/skills/sentry/references/concepts/profiling.md +38 -0
- package/skills/sentry/references/concepts/reduce-volume.md +49 -0
- package/skills/sentry/references/concepts/releases.md +43 -0
- package/skills/sentry/references/concepts/session-replay.md +35 -0
- package/skills/sentry/references/concepts/tracing.md +54 -0
- package/skills/sentry/references/concepts/user-feedback.md +36 -0
- package/skills/sentry/references/debug-artifacts/android.md +68 -0
- package/skills/sentry/references/debug-artifacts/apple.md +96 -0
- package/skills/sentry/references/debug-artifacts/dotnet.md +70 -0
- package/skills/sentry/references/debug-artifacts/flutter.md +65 -0
- package/skills/sentry/references/debug-artifacts/index.md +75 -0
- package/skills/sentry/references/debug-artifacts/javascript.md +94 -0
- package/skills/sentry/references/debug-artifacts/matching.md +73 -0
- package/skills/sentry/references/debug-artifacts/react-native.md +75 -0
- package/skills/sentry/references/first-error-setup.md +25 -0
- package/skills/sentry/references/instrumentation.md +30 -0
- package/skills/sentry/references/issues.md +32 -0
- package/skills/sentry/references/new-project.md +17 -0
- package/skills/sentry/references/otel-exporter.md +30 -0
- package/skills/sentry/references/release-workflow.md +31 -0
- package/skills/sentry/references/releases/ci-pipeline.md +214 -0
- package/skills/sentry/references/releases/index.md +93 -0
- package/skills/sentry/references/releases/suspect-commits.md +155 -0
- package/skills/sentry/references/releases/tagging.md +131 -0
- package/skills/sentry/references/releases/troubleshooting.md +67 -0
- package/skills/sentry/references/sdks/android/crons.md +305 -0
- package/skills/sentry/references/sdks/android/error-monitoring.md +800 -0
- package/skills/sentry/references/sdks/android/index.md +748 -0
- package/skills/sentry/references/sdks/android/integrations.md +48 -0
- package/skills/sentry/references/sdks/android/logging.md +374 -0
- package/skills/sentry/references/sdks/android/metrics.md +288 -0
- package/skills/sentry/references/sdks/android/profiling.md +397 -0
- package/skills/sentry/references/sdks/android/session-replay.md +406 -0
- package/skills/sentry/references/sdks/android/tracing.md +861 -0
- package/skills/sentry/references/sdks/browser/error-monitoring.md +861 -0
- package/skills/sentry/references/sdks/browser/index.md +714 -0
- package/skills/sentry/references/sdks/browser/logging.md +315 -0
- package/skills/sentry/references/sdks/browser/profiling.md +236 -0
- package/skills/sentry/references/sdks/browser/session-replay.md +586 -0
- package/skills/sentry/references/sdks/browser/tracing.md +561 -0
- package/skills/sentry/references/sdks/browser/user-feedback.md +354 -0
- package/skills/sentry/references/sdks/cloudflare/ai-monitoring.md +661 -0
- package/skills/sentry/references/sdks/cloudflare/crons.md +231 -0
- package/skills/sentry/references/sdks/cloudflare/durable-objects.md +381 -0
- package/skills/sentry/references/sdks/cloudflare/error-monitoring.md +329 -0
- package/skills/sentry/references/sdks/cloudflare/index.md +698 -0
- package/skills/sentry/references/sdks/cloudflare/logging.md +169 -0
- package/skills/sentry/references/sdks/cloudflare/nodejs-compat.md +134 -0
- package/skills/sentry/references/sdks/cloudflare/tracing.md +475 -0
- package/skills/sentry/references/sdks/cocoa/error-monitoring.md +394 -0
- package/skills/sentry/references/sdks/cocoa/index.md +497 -0
- package/skills/sentry/references/sdks/cocoa/logging.md +209 -0
- package/skills/sentry/references/sdks/cocoa/metrics.md +136 -0
- package/skills/sentry/references/sdks/cocoa/profiling.md +223 -0
- package/skills/sentry/references/sdks/cocoa/session-replay.md +257 -0
- package/skills/sentry/references/sdks/cocoa/tracing.md +524 -0
- package/skills/sentry/references/sdks/cocoa/user-feedback.md +310 -0
- package/skills/sentry/references/sdks/dotnet/crons.md +465 -0
- package/skills/sentry/references/sdks/dotnet/error-monitoring.md +1100 -0
- package/skills/sentry/references/sdks/dotnet/index.md +614 -0
- package/skills/sentry/references/sdks/dotnet/logging.md +556 -0
- package/skills/sentry/references/sdks/dotnet/metrics.md +229 -0
- package/skills/sentry/references/sdks/dotnet/profiling.md +296 -0
- package/skills/sentry/references/sdks/dotnet/tracing.md +897 -0
- package/skills/sentry/references/sdks/elixir/crons.md +371 -0
- package/skills/sentry/references/sdks/elixir/error-monitoring.md +335 -0
- package/skills/sentry/references/sdks/elixir/index.md +383 -0
- package/skills/sentry/references/sdks/elixir/logging.md +239 -0
- package/skills/sentry/references/sdks/elixir/tracing.md +233 -0
- package/skills/sentry/references/sdks/flutter/ecosystem-integrations.md +70 -0
- package/skills/sentry/references/sdks/flutter/error-monitoring.md +312 -0
- package/skills/sentry/references/sdks/flutter/index.md +728 -0
- package/skills/sentry/references/sdks/flutter/logging.md +387 -0
- package/skills/sentry/references/sdks/flutter/metrics.md +310 -0
- package/skills/sentry/references/sdks/flutter/profiling.md +214 -0
- package/skills/sentry/references/sdks/flutter/session-replay.md +308 -0
- package/skills/sentry/references/sdks/flutter/tracing.md +502 -0
- package/skills/sentry/references/sdks/go/crons.md +270 -0
- package/skills/sentry/references/sdks/go/error-monitoring.md +361 -0
- package/skills/sentry/references/sdks/go/index.md +324 -0
- package/skills/sentry/references/sdks/go/logging.md +354 -0
- package/skills/sentry/references/sdks/go/metrics.md +273 -0
- package/skills/sentry/references/sdks/go/profiling.md +46 -0
- package/skills/sentry/references/sdks/go/tracing.md +366 -0
- package/skills/sentry/references/sdks/index.md +41 -0
- package/skills/sentry/references/sdks/nestjs/ai-monitoring.md +410 -0
- package/skills/sentry/references/sdks/nestjs/crons.md +268 -0
- package/skills/sentry/references/sdks/nestjs/error-monitoring.md +729 -0
- package/skills/sentry/references/sdks/nestjs/index.md +699 -0
- package/skills/sentry/references/sdks/nestjs/logging.md +174 -0
- package/skills/sentry/references/sdks/nestjs/metrics.md +243 -0
- package/skills/sentry/references/sdks/nestjs/profiling.md +127 -0
- package/skills/sentry/references/sdks/nestjs/tracing.md +762 -0
- package/skills/sentry/references/sdks/nextjs/ai-monitoring.md +494 -0
- package/skills/sentry/references/sdks/nextjs/crons.md +383 -0
- package/skills/sentry/references/sdks/nextjs/error-monitoring.md +974 -0
- package/skills/sentry/references/sdks/nextjs/index.md +491 -0
- package/skills/sentry/references/sdks/nextjs/logging.md +381 -0
- package/skills/sentry/references/sdks/nextjs/metrics.md +411 -0
- package/skills/sentry/references/sdks/nextjs/profiling.md +403 -0
- package/skills/sentry/references/sdks/nextjs/session-replay.md +462 -0
- package/skills/sentry/references/sdks/nextjs/tracing.md +628 -0
- package/skills/sentry/references/sdks/node/ai-monitoring.md +303 -0
- package/skills/sentry/references/sdks/node/crons.md +432 -0
- package/skills/sentry/references/sdks/node/error-monitoring.md +1125 -0
- package/skills/sentry/references/sdks/node/index.md +942 -0
- package/skills/sentry/references/sdks/node/logging.md +380 -0
- package/skills/sentry/references/sdks/node/metrics.md +278 -0
- package/skills/sentry/references/sdks/node/profiling.md +373 -0
- package/skills/sentry/references/sdks/node/tracing.md +878 -0
- package/skills/sentry/references/sdks/php/ai-monitoring.md +310 -0
- package/skills/sentry/references/sdks/php/crons.md +265 -0
- package/skills/sentry/references/sdks/php/error-monitoring.md +626 -0
- package/skills/sentry/references/sdks/php/index.md +362 -0
- package/skills/sentry/references/sdks/php/laravel.md +542 -0
- package/skills/sentry/references/sdks/php/logging.md +242 -0
- package/skills/sentry/references/sdks/php/metrics.md +193 -0
- package/skills/sentry/references/sdks/php/profiling.md +115 -0
- package/skills/sentry/references/sdks/php/symfony.md +552 -0
- package/skills/sentry/references/sdks/php/tracing.md +516 -0
- package/skills/sentry/references/sdks/python/ai-monitoring.md +351 -0
- package/skills/sentry/references/sdks/python/crons.md +218 -0
- package/skills/sentry/references/sdks/python/error-monitoring.md +292 -0
- package/skills/sentry/references/sdks/python/index.md +361 -0
- package/skills/sentry/references/sdks/python/logging.md +234 -0
- package/skills/sentry/references/sdks/python/metrics.md +154 -0
- package/skills/sentry/references/sdks/python/profiling.md +120 -0
- package/skills/sentry/references/sdks/python/tracing.md +364 -0
- package/skills/sentry/references/sdks/react/error-monitoring.md +1607 -0
- package/skills/sentry/references/sdks/react/index.md +492 -0
- package/skills/sentry/references/sdks/react/logging.md +364 -0
- package/skills/sentry/references/sdks/react/profiling.md +322 -0
- package/skills/sentry/references/sdks/react/react-features.md +1272 -0
- package/skills/sentry/references/sdks/react/session-replay.md +1193 -0
- package/skills/sentry/references/sdks/react/tracing.md +1415 -0
- package/skills/sentry/references/sdks/react-native/error-monitoring.md +1481 -0
- package/skills/sentry/references/sdks/react-native/expo-config-plugin.md +45 -0
- package/skills/sentry/references/sdks/react-native/index.md +1030 -0
- package/skills/sentry/references/sdks/react-native/logging.md +444 -0
- package/skills/sentry/references/sdks/react-native/profiling.md +386 -0
- package/skills/sentry/references/sdks/react-native/session-replay.md +704 -0
- package/skills/sentry/references/sdks/react-native/tracing.md +1086 -0
- package/skills/sentry/references/sdks/react-native/user-feedback.md +815 -0
- package/skills/sentry/references/sdks/react-router-framework/error-monitoring.md +127 -0
- package/skills/sentry/references/sdks/react-router-framework/index.md +411 -0
- package/skills/sentry/references/sdks/react-router-framework/logging.md +66 -0
- package/skills/sentry/references/sdks/react-router-framework/profiling.md +57 -0
- package/skills/sentry/references/sdks/react-router-framework/react-router-framework-features.md +110 -0
- package/skills/sentry/references/sdks/react-router-framework/session-replay.md +67 -0
- package/skills/sentry/references/sdks/react-router-framework/tracing.md +96 -0
- package/skills/sentry/references/sdks/react-router-framework/user-feedback.md +71 -0
- package/skills/sentry/references/sdks/ruby/crons.md +184 -0
- package/skills/sentry/references/sdks/ruby/error-monitoring.md +248 -0
- package/skills/sentry/references/sdks/ruby/index.md +297 -0
- package/skills/sentry/references/sdks/ruby/logging.md +168 -0
- package/skills/sentry/references/sdks/ruby/metrics.md +196 -0
- package/skills/sentry/references/sdks/ruby/migration.md +321 -0
- package/skills/sentry/references/sdks/ruby/profiling.md +107 -0
- package/skills/sentry/references/sdks/ruby/tracing.md +388 -0
- package/skills/sentry/references/sdks/svelte/error-monitoring.md +456 -0
- package/skills/sentry/references/sdks/svelte/index.md +467 -0
- package/skills/sentry/references/sdks/svelte/logging.md +344 -0
- package/skills/sentry/references/sdks/svelte/session-replay.md +369 -0
- package/skills/sentry/references/sdks/svelte/tracing.md +406 -0
- package/skills/sentry/references/sdks/tanstack-start/error-monitoring.md +149 -0
- package/skills/sentry/references/sdks/tanstack-start/index.md +381 -0
- package/skills/sentry/references/sdks/tanstack-start/logging.md +74 -0
- package/skills/sentry/references/sdks/tanstack-start/session-replay.md +76 -0
- package/skills/sentry/references/sdks/tanstack-start/tanstackstart-features.md +128 -0
- package/skills/sentry/references/sdks/tanstack-start/tracing.md +123 -0
- package/skills/sentry/references/sdks/tanstack-start/user-feedback.md +81 -0
- package/skills/sentry/references/search-query-language.md +226 -0
- package/skills/sentry/references/semantics/angular.md +7 -0
- package/skills/sentry/references/semantics/app.md +28 -0
- package/skills/sentry/references/semantics/art.md +17 -0
- package/skills/sentry/references/semantics/aws.md +43 -0
- package/skills/sentry/references/semantics/browser.md +34 -0
- package/skills/sentry/references/semantics/cache.md +12 -0
- package/skills/sentry/references/semantics/client.md +8 -0
- package/skills/sentry/references/semantics/cloud.md +12 -0
- package/skills/sentry/references/semantics/cloudflare.md +23 -0
- package/skills/sentry/references/semantics/code.md +11 -0
- package/skills/sentry/references/semantics/culture.md +11 -0
- package/skills/sentry/references/semantics/db.md +21 -0
- package/skills/sentry/references/semantics/device.md +43 -0
- package/skills/sentry/references/semantics/error.md +7 -0
- package/skills/sentry/references/semantics/event.md +8 -0
- package/skills/sentry/references/semantics/exception.md +10 -0
- package/skills/sentry/references/semantics/faas.md +19 -0
- package/skills/sentry/references/semantics/file.md +8 -0
- package/skills/sentry/references/semantics/flag.md +7 -0
- package/skills/sentry/references/semantics/gcp.md +16 -0
- package/skills/sentry/references/semantics/gen_ai.md +53 -0
- package/skills/sentry/references/semantics/general.md +11 -0
- package/skills/sentry/references/semantics/graphql.md +9 -0
- package/skills/sentry/references/semantics/grpc.md +19 -0
- package/skills/sentry/references/semantics/http.md +34 -0
- package/skills/sentry/references/semantics/index.md +63 -0
- package/skills/sentry/references/semantics/jsonrpc.md +8 -0
- package/skills/sentry/references/semantics/jvm.md +12 -0
- package/skills/sentry/references/semantics/koa.md +7 -0
- package/skills/sentry/references/semantics/logger.md +7 -0
- package/skills/sentry/references/semantics/mcp.md +37 -0
- package/skills/sentry/references/semantics/mdc.md +7 -0
- package/skills/sentry/references/semantics/messaging.md +23 -0
- package/skills/sentry/references/semantics/middleware.md +7 -0
- package/skills/sentry/references/semantics/navigation.md +9 -0
- package/skills/sentry/references/semantics/nel.md +11 -0
- package/skills/sentry/references/semantics/network.md +17 -0
- package/skills/sentry/references/semantics/os.md +15 -0
- package/skills/sentry/references/semantics/otel.md +10 -0
- package/skills/sentry/references/semantics/params.md +7 -0
- package/skills/sentry/references/semantics/process.md +14 -0
- package/skills/sentry/references/semantics/react.md +7 -0
- package/skills/sentry/references/semantics/remix.md +7 -0
- package/skills/sentry/references/semantics/resource.md +7 -0
- package/skills/sentry/references/semantics/rpc.md +10 -0
- package/skills/sentry/references/semantics/score.md +10 -0
- package/skills/sentry/references/semantics/sentry.md +69 -0
- package/skills/sentry/references/semantics/server.md +8 -0
- package/skills/sentry/references/semantics/service.md +8 -0
- package/skills/sentry/references/semantics/session.md +7 -0
- package/skills/sentry/references/semantics/state.md +7 -0
- package/skills/sentry/references/semantics/thread.md +8 -0
- package/skills/sentry/references/semantics/timber.md +7 -0
- package/skills/sentry/references/semantics/trpc.md +8 -0
- package/skills/sentry/references/semantics/ui.md +18 -0
- package/skills/sentry/references/semantics/url.md +15 -0
- package/skills/sentry/references/semantics/user.md +17 -0
- package/skills/sentry/references/semantics/user_agent.md +7 -0
- package/skills/sentry/references/semantics/vercel.md +42 -0
- package/skills/sentry/references/setup-verification.md +39 -0
- package/skills/sentry/references/snapshots/github-actions-fanout.md +206 -0
- package/skills/sentry/references/snapshots/github-actions-simple.md +102 -0
- package/skills/sentry/references/snapshots/github-actions-swift-snapshot-testing.md +118 -0
- package/skills/sentry/references/snapshots/index.md +19 -0
- package/skills/sentry/references/snapshots/snapshot-previews.md +100 -0
- package/skills/sentry/references/snapshots/snapshots.md +123 -0
- package/skills/sentry/references/snapshots/wizard-setup.md +134 -0
- package/skills/testing/LICENSE +21 -0
- package/skills/testing/NOTICE +7 -0
- package/skills/testing/SKILL.md +13 -19
- package/skills/testing/agents/openai.yaml +1 -2
- package/skills/testing/references/selection.md +23 -0
- package/skills/testing/references/tdd.md +19 -0
- package/skills/testing/references/test-design.md +17 -0
- package/src/catalog.ts +1 -7
- package/skills/build-effect-apis/SKILL.md +0 -81
- package/skills/build-effect-apis/agents/openai.yaml +0 -4
- package/skills/build-effect-clis/SKILL.md +0 -92
- package/skills/build-effect-clis/agents/openai.yaml +0 -4
- package/skills/effect-architecture-audit/agents/openai.yaml +0 -4
- package/skills/effect-atom-state/SKILL.md +0 -97
- package/skills/effect-atom-state/agents/openai.yaml +0 -4
- package/skills/effect-ts/SKILL.md +0 -35
- package/skills/effect-ts/agents/openai.yaml +0 -4
- /package/skills/{build-effect-apis/references → effect-development/references/api}/cloudflare-workers.md +0 -0
- /package/skills/{build-effect-apis/references → effect-development/references/api}/runtime-assembly.md +0 -0
- /package/skills/{build-effect-apis/references → effect-development/references/api}/server-and-middleware.md +0 -0
- /package/skills/{build-effect-apis/references → effect-development/references/api}/shared-contracts.md +0 -0
- /package/skills/{effect-architecture-audit/references → effect-development/references/architecture}/service-and-boundary-audit.md +0 -0
- /package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-lifecycle.md +0 -0
- /package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-workflows.md +0 -0
- /package/skills/{effect-atom-state/references → effect-development/references/atom}/tanstack-start.md +0 -0
- /package/skills/{build-effect-clis/references → effect-development/references/cli}/command-design.md +0 -0
- /package/skills/{build-effect-clis/references → effect-development/references/cli}/processes-and-platform.md +0 -0
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
# Error Monitoring — Sentry Ruby SDK
|
|
2
|
+
|
|
3
|
+
> Minimum SDK: `sentry-ruby` gem 5.0.0+
|
|
4
|
+
|
|
5
|
+
## Contents
|
|
6
|
+
|
|
7
|
+
- [Configuration](#configuration)
|
|
8
|
+
- [Code Examples](#code-examples)
|
|
9
|
+
- [Scope API Reference](#scope-api-reference)
|
|
10
|
+
- [Best Practices](#best-practices)
|
|
11
|
+
- [Troubleshooting](#troubleshooting)
|
|
12
|
+
|
|
13
|
+
## Configuration
|
|
14
|
+
|
|
15
|
+
Key `Sentry.init` options for error monitoring:
|
|
16
|
+
|
|
17
|
+
| Option | Type | Default | Purpose |
|
|
18
|
+
| ------------------------- | --------- | ---------- | --------------------------------------------- |
|
|
19
|
+
| `send_default_pii` | `Boolean` | `false` | Include request headers, IP addresses |
|
|
20
|
+
| `sample_rate` | `Float` | `1.0` | Error event sample rate (0.0–1.0) |
|
|
21
|
+
| `excluded_exceptions` | `Array` | common 4xx | Exception classes to ignore |
|
|
22
|
+
| `include_local_variables` | `Boolean` | `false` | Capture local variables from exception frames |
|
|
23
|
+
| `max_breadcrumbs` | `Integer` | `100` | Max breadcrumbs per event |
|
|
24
|
+
| `before_send` | `Lambda` | `nil` | Mutate or drop error events before sending |
|
|
25
|
+
| `before_breadcrumb` | `Lambda` | `nil` | Mutate or drop breadcrumbs |
|
|
26
|
+
|
|
27
|
+
## Code Examples
|
|
28
|
+
|
|
29
|
+
### Automatic capture
|
|
30
|
+
|
|
31
|
+
**Rails** (`sentry-rails`): exceptions in controllers, background jobs, and mailers are
|
|
32
|
+
captured automatically — no extra code needed.
|
|
33
|
+
|
|
34
|
+
**Rack / Sinatra**: register the middleware once and all unhandled exceptions are
|
|
35
|
+
captured:
|
|
36
|
+
|
|
37
|
+
```ruby
|
|
38
|
+
use Sentry::Rack::CaptureExceptions
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Manual capture
|
|
42
|
+
|
|
43
|
+
```ruby
|
|
44
|
+
# Capture any exception
|
|
45
|
+
begin
|
|
46
|
+
risky_operation
|
|
47
|
+
rescue => e
|
|
48
|
+
Sentry.capture_exception(e)
|
|
49
|
+
raise # re-raise if you want normal error handling to continue
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Capture a plain message (no exception)
|
|
53
|
+
Sentry.capture_message("payment gateway unreachable", level: :warning)
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### User identification
|
|
57
|
+
|
|
58
|
+
```ruby
|
|
59
|
+
# Set user context — call in a Rails before_action or Rack middleware
|
|
60
|
+
Sentry.set_user(
|
|
61
|
+
id: current_user.id,
|
|
62
|
+
email: current_user.email,
|
|
63
|
+
username: current_user.username
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
# Clear the user (e.g., on sign-out)
|
|
67
|
+
Sentry.set_user({})
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Tags, context, and extras
|
|
71
|
+
|
|
72
|
+
```ruby
|
|
73
|
+
# Tags — indexed, filterable in Sentry search
|
|
74
|
+
Sentry.set_tags(region: "us-east-1", plan: "enterprise")
|
|
75
|
+
|
|
76
|
+
# Context — structured data attached to events (not indexed)
|
|
77
|
+
Sentry.set_context("order", { id: order.id, total: order.total, currency: "USD" })
|
|
78
|
+
|
|
79
|
+
# Extras — deprecated; prefer set_context for structured data
|
|
80
|
+
Sentry.set_extras(raw_payload: payload.inspect)
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Isolated scope with `with_scope`
|
|
84
|
+
|
|
85
|
+
Changes inside `with_scope` are discarded after the block — ideal for one-off enrichment
|
|
86
|
+
without polluting subsequent events:
|
|
87
|
+
|
|
88
|
+
```ruby
|
|
89
|
+
Sentry.with_scope do |scope|
|
|
90
|
+
scope.set_tags(component: "checkout", payment_provider: "stripe")
|
|
91
|
+
scope.set_user(id: order.user_id)
|
|
92
|
+
Sentry.capture_exception(e)
|
|
93
|
+
end
|
|
94
|
+
# ← scope changes above do NOT affect subsequent events
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Persistent scope with `configure_scope`
|
|
98
|
+
|
|
99
|
+
```ruby
|
|
100
|
+
Sentry.configure_scope do |scope|
|
|
101
|
+
scope.set_tags(app_version: APP_VERSION)
|
|
102
|
+
scope.set_user(id: current_user.id)
|
|
103
|
+
end
|
|
104
|
+
# These values apply to all subsequent events in this request/fiber
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Rails: per-request context via `before_action`
|
|
108
|
+
|
|
109
|
+
```ruby
|
|
110
|
+
class ApplicationController < ActionController::Base
|
|
111
|
+
before_action :set_sentry_context
|
|
112
|
+
|
|
113
|
+
private
|
|
114
|
+
|
|
115
|
+
def set_sentry_context
|
|
116
|
+
return unless current_user
|
|
117
|
+
Sentry.set_user(id: current_user.id, email: current_user.email)
|
|
118
|
+
Sentry.set_tags(tenant: current_user.account.slug)
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Breadcrumbs
|
|
124
|
+
|
|
125
|
+
```ruby
|
|
126
|
+
crumb = Sentry::Breadcrumb.new(
|
|
127
|
+
category: "auth",
|
|
128
|
+
message: "User #{user.email} authenticated",
|
|
129
|
+
level: "info"
|
|
130
|
+
)
|
|
131
|
+
Sentry.add_breadcrumb(crumb)
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
Automatic breadcrumbs are recorded when `breadcrumbs_logger` is configured:
|
|
135
|
+
|
|
136
|
+
```ruby
|
|
137
|
+
config.breadcrumbs_logger = [:active_support_logger, :http_logger, :redis_logger]
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
| Logger | Captures |
|
|
141
|
+
| ------------------------ | ---------------------------------------------------- |
|
|
142
|
+
| `:active_support_logger` | Rails controller actions, SQL queries, mailer events |
|
|
143
|
+
| `:http_logger` | Outbound Net::HTTP requests |
|
|
144
|
+
| `:redis_logger` | Redis commands |
|
|
145
|
+
| `:sentry_logger` | Ruby `Logger` writes |
|
|
146
|
+
|
|
147
|
+
### `before_send` hook
|
|
148
|
+
|
|
149
|
+
```ruby
|
|
150
|
+
Sentry.init do |config|
|
|
151
|
+
config.before_send = lambda do |event, hint|
|
|
152
|
+
# Drop ZeroDivisionError
|
|
153
|
+
if hint[:exception].is_a?(ZeroDivisionError)
|
|
154
|
+
next nil # return nil to discard the event
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
# Custom fingerprint for database errors
|
|
158
|
+
if hint[:exception].is_a?(ActiveRecord::StatementInvalid)
|
|
159
|
+
event.fingerprint = ["database-error", hint[:exception].message.split("\n").first]
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
# Scrub sensitive fields from the request body
|
|
163
|
+
event.request&.data&.delete("credit_card_number")
|
|
164
|
+
|
|
165
|
+
event
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### Exception filters
|
|
171
|
+
|
|
172
|
+
```ruby
|
|
173
|
+
config.excluded_exceptions += [
|
|
174
|
+
"ActionController::RoutingError",
|
|
175
|
+
"ActiveRecord::RecordNotFound",
|
|
176
|
+
"Rack::QueryParser::InvalidParameterError"
|
|
177
|
+
]
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Local variable capture
|
|
181
|
+
|
|
182
|
+
```ruby
|
|
183
|
+
config.include_local_variables = true
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
Captures local variables from the frames in the exception backtrace.
|
|
187
|
+
Useful for debugging hard-to-reproduce errors.
|
|
188
|
+
Evaluate privacy implications before enabling in production.
|
|
189
|
+
|
|
190
|
+
### Custom fingerprinting
|
|
191
|
+
|
|
192
|
+
```ruby
|
|
193
|
+
# One-off — override grouping for a specific capture
|
|
194
|
+
Sentry.with_scope do |scope|
|
|
195
|
+
scope.set_fingerprint(["database-connection-error"])
|
|
196
|
+
Sentry.capture_exception(e)
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
# Extend default grouping in before_send
|
|
200
|
+
config.before_send = lambda do |event, hint|
|
|
201
|
+
if hint[:exception].is_a?(MyWorker::JobError)
|
|
202
|
+
event.fingerprint = ["{{ default }}", hint[:exception].job_class]
|
|
203
|
+
end
|
|
204
|
+
event
|
|
205
|
+
end
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
## Scope API Reference
|
|
209
|
+
|
|
210
|
+
```ruby
|
|
211
|
+
# Shorthand module methods (operate on current scope)
|
|
212
|
+
Sentry.set_user(id:, email:, username:, ip_address:)
|
|
213
|
+
Sentry.set_tags(key: "value")
|
|
214
|
+
Sentry.set_context("key", { field: "value" })
|
|
215
|
+
Sentry.set_extras(key: "value") # deprecated — prefer set_context
|
|
216
|
+
|
|
217
|
+
# Scope instance methods (inside with_scope / configure_scope blocks)
|
|
218
|
+
scope.set_tags(key: "value")
|
|
219
|
+
scope.set_user(id: "42", email: "user@example.com")
|
|
220
|
+
scope.set_context("key", { field: "value" })
|
|
221
|
+
scope.set_level(:error) # :debug | :info | :warning | :error | :fatal
|
|
222
|
+
scope.set_fingerprint(["my-group"])
|
|
223
|
+
scope.clear
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
## Best Practices
|
|
227
|
+
|
|
228
|
+
- Call `Sentry.init` in `config/initializers/sentry.rb` (Rails) or at the top of
|
|
229
|
+
`config.ru` before any middleware
|
|
230
|
+
- Use `Sentry.with_scope` for one-off context; use `configure_scope` for persistent
|
|
231
|
+
request context
|
|
232
|
+
- Set user in a Rails `before_action` so every exception in that request includes user
|
|
233
|
+
info
|
|
234
|
+
- Use `excluded_exceptions` to filter out expected 4xx errors and keep signal-to-noise
|
|
235
|
+
high
|
|
236
|
+
- Enable `include_local_variables` in development/staging; evaluate privacy implications
|
|
237
|
+
for production
|
|
238
|
+
|
|
239
|
+
## Troubleshooting
|
|
240
|
+
|
|
241
|
+
| Issue | Solution |
|
|
242
|
+
| ----------------------------------------- | -------------------------------------------------------------------------------------------- |
|
|
243
|
+
| Events not appearing | Set `config.debug = true`; check DSN; ensure `Sentry.init` is called before exceptions occur |
|
|
244
|
+
| Rails exceptions missing | Use `sentry-rails` gem — `sentry-ruby` alone does not hook Rails error handlers |
|
|
245
|
+
| Missing request context | Set `config.send_default_pii = true` |
|
|
246
|
+
| `before_send` not called for transactions | Use `before_send_transaction` for performance events |
|
|
247
|
+
| Error captured but wrong user | Ensure `set_user` runs in a `before_action` before the exception is raised |
|
|
248
|
+
| Noise from routing errors | Add `"ActionController::RoutingError"` to `excluded_exceptions` |
|
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
# Sentry Ruby SDK
|
|
2
|
+
|
|
3
|
+
Opinionated wizard that scans the project and guides through complete Sentry setup.
|
|
4
|
+
|
|
5
|
+
> **Note:** SDK APIs below reflect sentry-ruby v6.6.2. Always verify against
|
|
6
|
+
> [docs.sentry.io/platforms/ruby/](https://docs.sentry.io/platforms/ruby/) before
|
|
7
|
+
> implementing.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Phase 1: Detect
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
# Existing Sentry gems
|
|
15
|
+
grep -i sentry Gemfile 2>/dev/null
|
|
16
|
+
|
|
17
|
+
# Framework
|
|
18
|
+
grep -iE '\brails\b|\bsinatra\b' Gemfile 2>/dev/null
|
|
19
|
+
|
|
20
|
+
# Web server — Puma triggers queue time guidance
|
|
21
|
+
grep -iE '\bpuma\b' Gemfile 2>/dev/null
|
|
22
|
+
|
|
23
|
+
# Background jobs
|
|
24
|
+
grep -iE '\bsidekiq\b|\bresque\b|\bdelayed_job\b' Gemfile 2>/dev/null
|
|
25
|
+
|
|
26
|
+
# Yabeda metrics framework
|
|
27
|
+
grep -iE '\byabeda\b' Gemfile 2>/dev/null
|
|
28
|
+
|
|
29
|
+
# Competitor monitoring tools — triggers migration path if found
|
|
30
|
+
grep -iE '\bappsignal\b|\bhoneybadger\b|\bbugsnag\b|\brollbar\b|\bairbrake\b' Gemfile 2>/dev/null
|
|
31
|
+
|
|
32
|
+
# Scheduled jobs — triggers Crons recommendation
|
|
33
|
+
grep -iE '\bsidekiq-cron\b|\bclockwork\b|\bwhenever\b|\brufus-scheduler\b' Gemfile 2>/dev/null
|
|
34
|
+
grep -rn "Sidekiq::Cron\|Clockwork\|every.*do" config/ lib/ --include="*.rb" 2>/dev/null | head -10
|
|
35
|
+
|
|
36
|
+
# OpenTelemetry tracing — check for SDK + instrumentations
|
|
37
|
+
grep -iE '\bopentelemetry-sdk\b|\bopentelemetry-instrumentation\b' Gemfile 2>/dev/null
|
|
38
|
+
grep -rn "OpenTelemetry::SDK\.configure\|\.use_all\|\.in_span" config/ lib/ app/ --include="*.rb" 2>/dev/null | head -5
|
|
39
|
+
|
|
40
|
+
# Existing metric patterns (StatsD, Datadog, Prometheus)
|
|
41
|
+
grep -rE "(statsd|dogstatsd|prometheus|\.gauge|\.histogram|\.increment|\.timing)" \
|
|
42
|
+
app/ lib/ --include="*.rb" 2>/dev/null | grep -v "_spec\|_test" | head -20
|
|
43
|
+
|
|
44
|
+
# Companion frontend
|
|
45
|
+
cat package.json frontend/package.json web/package.json 2>/dev/null | grep -E '"@sentry|"sentry-'
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
**Route from what you find:**
|
|
49
|
+
|
|
50
|
+
- **Competitor detected** (`appsignal`, `honeybadger`, `bugsnag`, `rollbar`, `airbrake`)
|
|
51
|
+
→ load `./migration.md` first; **delete the competitor initializer** as part of
|
|
52
|
+
migration
|
|
53
|
+
- **Sentry already present** → skip to Phase 2 to configure features
|
|
54
|
+
- **Rails** → use `sentry-rails` + `config/initializers/sentry.rb`
|
|
55
|
+
- **Rack/Sinatra** → `sentry-ruby` + `Sentry::Rack::CaptureExceptions` middleware
|
|
56
|
+
- **Sidekiq** → add `sentry-sidekiq`; recommend Metrics if existing metric patterns
|
|
57
|
+
found
|
|
58
|
+
- **Yabeda detected** → add `sentry-yabeda`; routes Yabeda metrics to Sentry metrics
|
|
59
|
+
- **Puma detected** → queue time capture is automatic (v6.4.0+), but the reverse proxy
|
|
60
|
+
must set `X-Request-Start` header; see `./tracing.md` → “Request Queue Time”
|
|
61
|
+
- **OTel tracing detected** (`opentelemetry-sdk` + instrumentations in Gemfile, or
|
|
62
|
+
`OpenTelemetry::SDK.configure` in source) → use OTLP path:
|
|
63
|
+
`config.otlp.enabled = true`; do **not** set `traces_sample_rate`; Sentry links errors
|
|
64
|
+
to OTel traces automatically
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Phase 2: Recommend
|
|
69
|
+
|
|
70
|
+
Lead with a concrete proposal — don’t ask open-ended questions:
|
|
71
|
+
|
|
72
|
+
| Feature | Recommend when … |
|
|
73
|
+
| ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
74
|
+
| Error Monitoring | **Always** |
|
|
75
|
+
| OTLP Integration | OTel tracing detected — **replaces** native Tracing |
|
|
76
|
+
| Tracing | Rails / Sinatra / Rack / any HTTP framework; **skip if OTel tracing detected** |
|
|
77
|
+
| Logging | **Always** — `enable_logs: true` costs nothing |
|
|
78
|
+
| Metrics | Sidekiq present; existing metric lib (StatsD, Prometheus) detected |
|
|
79
|
+
| Profiling | ⚠️ Beta — performance profiling requested; requires `stackprof` or `vernier` gem; **skip if OTel tracing detected** (requires `traces_sample_rate`, incompatible with OTLP) |
|
|
80
|
+
| Crons | Scheduled jobs detected (ActiveJob, Sidekiq-Cron, Clockwork, Whenever) |
|
|
81
|
+
|
|
82
|
+
**OTel tracing detected:** _“I see OpenTelemetry tracing in the project.
|
|
83
|
+
I recommend Sentry’s OTLP integration for tracing (via your existing OTel setup) + Error
|
|
84
|
+
Monitoring + Sentry Logging [+ Metrics/Crons if applicable]. Shall I proceed?”_
|
|
85
|
+
|
|
86
|
+
**No OTel:** _“I recommend Error Monitoring + Tracing + Logging
|
|
87
|
+
[+ Metrics if applicable]. Shall I proceed?”_
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## Phase 3: Guide
|
|
92
|
+
|
|
93
|
+
### Install
|
|
94
|
+
|
|
95
|
+
**Rails:**
|
|
96
|
+
|
|
97
|
+
```ruby
|
|
98
|
+
# Gemfile
|
|
99
|
+
gem "sentry-ruby"
|
|
100
|
+
gem "sentry-rails"
|
|
101
|
+
gem "sentry-sidekiq" # if using Sidekiq
|
|
102
|
+
gem "sentry-resque" # if using Resque
|
|
103
|
+
gem "sentry-delayed_job" # if using DelayedJob
|
|
104
|
+
gem "sentry-yabeda" # if using Yabeda metrics framework
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**Rack / Sinatra / plain Ruby:**
|
|
108
|
+
|
|
109
|
+
```ruby
|
|
110
|
+
gem "sentry-ruby"
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Run `bundle install`.
|
|
114
|
+
|
|
115
|
+
### Framework Integration
|
|
116
|
+
|
|
117
|
+
| Framework / Runtime | Gem | Init location | Auto-instruments |
|
|
118
|
+
| ------------------- | -------------------- | ------------------------------------ | ----------------------------------------------------------- |
|
|
119
|
+
| Rails | `sentry-rails` | `config/initializers/sentry.rb` | Controllers, ActiveRecord, ActiveJob, ActionMailer |
|
|
120
|
+
| Rack / Sinatra | `sentry-ruby` | Top of `config.ru` | Requests (via `Sentry::Rack::CaptureExceptions` middleware) |
|
|
121
|
+
| Sidekiq | `sentry-sidekiq` | Sentry initializer or Sidekiq config | Worker execution → transactions |
|
|
122
|
+
| Resque | `sentry-resque` | Sentry initializer | Worker execution → transactions |
|
|
123
|
+
| DelayedJob | `sentry-delayed_job` | Sentry initializer | Job execution → transactions |
|
|
124
|
+
| Yabeda metrics | `sentry-yabeda` | Sentry initializer | Yabeda metric events → Sentry metrics |
|
|
125
|
+
|
|
126
|
+
### Init — Rails (`config/initializers/sentry.rb`)
|
|
127
|
+
|
|
128
|
+
```ruby
|
|
129
|
+
Sentry.init do |config|
|
|
130
|
+
config.dsn = ENV["SENTRY_DSN"]
|
|
131
|
+
config.spotlight = Rails.env.development? # local Spotlight UI; no DSN needed in dev
|
|
132
|
+
config.breadcrumbs_logger = [:active_support_logger, :http_logger]
|
|
133
|
+
config.send_default_pii = true
|
|
134
|
+
config.traces_sample_rate = 1.0 # lower to 0.05–0.2 in production
|
|
135
|
+
config.enable_logs = true
|
|
136
|
+
# Metrics on by default; disable with: config.enable_metrics = false
|
|
137
|
+
end
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
`sentry-rails` auto-instruments ActionController, ActiveRecord, ActiveJob, ActionMailer.
|
|
141
|
+
|
|
142
|
+
### Init — Rack / Sinatra
|
|
143
|
+
|
|
144
|
+
```ruby
|
|
145
|
+
require "sentry-ruby"
|
|
146
|
+
|
|
147
|
+
Sentry.init do |config|
|
|
148
|
+
config.dsn = ENV["SENTRY_DSN"]
|
|
149
|
+
config.spotlight = ENV["RACK_ENV"] == "development"
|
|
150
|
+
config.breadcrumbs_logger = [:sentry_logger, :http_logger]
|
|
151
|
+
config.send_default_pii = true
|
|
152
|
+
config.traces_sample_rate = 1.0
|
|
153
|
+
config.enable_logs = true
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
use Sentry::Rack::CaptureExceptions # in config.ru, before app middleware
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### Init — Sidekiq standalone
|
|
160
|
+
|
|
161
|
+
```ruby
|
|
162
|
+
require "sentry-ruby"
|
|
163
|
+
require "sentry-sidekiq"
|
|
164
|
+
|
|
165
|
+
Sentry.init do |config|
|
|
166
|
+
config.dsn = ENV["SENTRY_DSN"]
|
|
167
|
+
config.spotlight = ENV.fetch("RAILS_ENV", "development") == "development"
|
|
168
|
+
config.breadcrumbs_logger = [:sentry_logger]
|
|
169
|
+
config.traces_sample_rate = 1.0
|
|
170
|
+
config.enable_logs = true
|
|
171
|
+
end
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### Environment variables
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
SENTRY_DSN=https://xxx@oYYY.ingest.sentry.io/ZZZ
|
|
178
|
+
SENTRY_ENVIRONMENT=production # overrides RAILS_ENV / RACK_ENV
|
|
179
|
+
SENTRY_RELEASE=my-app@1.0.0
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### Feature reference files
|
|
183
|
+
|
|
184
|
+
Walk through features one at a time.
|
|
185
|
+
Load the reference file for each, follow its steps, and verify before moving to the
|
|
186
|
+
next:
|
|
187
|
+
|
|
188
|
+
| Feature | Reference file | Load when … |
|
|
189
|
+
| ---------------- | ----------------------- | -------------------------------------------------------- |
|
|
190
|
+
| Migration | `./migration.md` | Competitor gem found — load **before** installing Sentry |
|
|
191
|
+
| Error Monitoring | `./error-monitoring.md` | Always |
|
|
192
|
+
| Tracing | `./tracing.md` | HTTP handlers / distributed tracing |
|
|
193
|
+
| Logging | `./logging.md` | Structured log capture |
|
|
194
|
+
| Metrics | `./metrics.md` | Sidekiq present; existing metric patterns |
|
|
195
|
+
| Profiling | `./profiling.md` | Performance profiling requested (beta) |
|
|
196
|
+
| Crons | `./crons.md` | Scheduled jobs detected or requested |
|
|
197
|
+
|
|
198
|
+
For each feature: `Read ./<feature>.md`, follow steps exactly, verify it works.
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## Configuration Reference
|
|
203
|
+
|
|
204
|
+
### Key `Sentry.init` Options
|
|
205
|
+
|
|
206
|
+
| Option | Type | Default | Purpose |
|
|
207
|
+
| --------------------------- | ------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
208
|
+
| `dsn` | String | `nil` | SDK disabled if empty; env: `SENTRY_DSN` |
|
|
209
|
+
| `environment` | String | `nil` | e.g., `"production"`; env: `SENTRY_ENVIRONMENT` |
|
|
210
|
+
| `release` | String | `nil` | e.g., `"myapp@1.0.0"`; env: `SENTRY_RELEASE` |
|
|
211
|
+
| `spotlight` | Boolean | `false` | Send events to Spotlight sidecar (local dev, no DSN needed) |
|
|
212
|
+
| `send_default_pii` | Boolean | `false` | Include IP addresses and request headers |
|
|
213
|
+
| `sample_rate` | Float | `1.0` | Error event sample rate (0.0–1.0) |
|
|
214
|
+
| `traces_sample_rate` | Float | `nil` | Transaction sample rate; `nil` disables tracing |
|
|
215
|
+
| `profiles_sample_rate` | Float | `nil` | Profiling rate relative to `traces_sample_rate`; requires `stackprof` or `vernier` |
|
|
216
|
+
| `enable_logs` | Boolean | `false` | Enable Sentry structured Logs |
|
|
217
|
+
| `enable_metrics` | Boolean | `true` | Enable custom metrics (on by default) |
|
|
218
|
+
| `breadcrumbs_logger` | Array | `[]` | Loggers for automatic breadcrumbs (see logging reference) |
|
|
219
|
+
| `max_breadcrumbs` | Integer | `100` | Max breadcrumbs per event |
|
|
220
|
+
| `debug` | Boolean | `false` | Verbose SDK output to stdout |
|
|
221
|
+
| `capture_queue_time` | Boolean | `true` | Record request queue time from `X-Request-Start` header (v6.4.0+, Rails fixed in v6.4.1) |
|
|
222
|
+
| `otlp.enabled` | Boolean | `false` | Route OTel spans to Sentry via OTLP; **do not combine with** `traces_sample_rate` |
|
|
223
|
+
| `otlp.collector_url` | String | `nil` | OTLP HTTP endpoint of an OTel Collector (e.g., `http://localhost:4318/v1/traces`); when set, spans are sent to the collector instead of directly to Sentry |
|
|
224
|
+
| `org_id` | String | `nil` | Explicit org ID; overrides DSN-extracted value; useful for self-hosted/Relay setups (v6.5.0+) |
|
|
225
|
+
| `strict_trace_continuation` | Boolean | `false` | Only continue incoming traces when `sentry-org_id` baggage matches SDK’s org ID; prevents trace stitching from third-party services (v6.5.0+) |
|
|
226
|
+
| `before_send` | Lambda | `nil` | Mutate or drop error events before sending |
|
|
227
|
+
| `before_send_transaction` | Lambda | `nil` | Mutate or drop transaction events before sending |
|
|
228
|
+
| `before_send_log` | Lambda | `nil` | Mutate or drop log events before sending |
|
|
229
|
+
|
|
230
|
+
### Environment Variables
|
|
231
|
+
|
|
232
|
+
| Variable | Maps to | Purpose |
|
|
233
|
+
| -------------------- | ------------- | ---------------------------------- |
|
|
234
|
+
| `SENTRY_DSN` | `dsn` | Data Source Name |
|
|
235
|
+
| `SENTRY_RELEASE` | `release` | App version (e.g., `my-app@1.0.0`) |
|
|
236
|
+
| `SENTRY_ENVIRONMENT` | `environment` | Deployment environment |
|
|
237
|
+
|
|
238
|
+
Options set in `Sentry.init` override environment variables.
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
## Verification
|
|
243
|
+
|
|
244
|
+
**Local dev (no DSN needed) — Spotlight:**
|
|
245
|
+
|
|
246
|
+
```bash
|
|
247
|
+
npx @spotlightjs/spotlight # browser UI at http://localhost:8969
|
|
248
|
+
# or stream events to terminal:
|
|
249
|
+
npx @spotlightjs/spotlight tail traces --format json
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
`config.spotlight = Rails.env.development?` (already in the init block above) routes
|
|
253
|
+
events to the local sidecar automatically.
|
|
254
|
+
|
|
255
|
+
**With a real DSN:**
|
|
256
|
+
|
|
257
|
+
```ruby
|
|
258
|
+
Sentry.capture_message("Sentry Ruby SDK test")
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
Nothing appears? Set `config.debug = true` and check stdout.
|
|
262
|
+
Verify DSN format: `https://<key>@o<org>.ingest.sentry.io/<project>`.
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
## Phase 4: Cross-Link
|
|
267
|
+
|
|
268
|
+
```bash
|
|
269
|
+
cat package.json frontend/package.json web/package.json 2>/dev/null | grep -E '"@sentry|"sentry-'
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
| Frontend detected | Suggest |
|
|
273
|
+
| ------------------ | -------------------------------------------------------------------------------------------------------------------------- |
|
|
274
|
+
| React / Next.js | [`react`](../react/index.md) |
|
|
275
|
+
| Svelte / SvelteKit | [`svelte`](../svelte/index.md) |
|
|
276
|
+
| Vue | `@sentry/vue` — [docs.sentry.io/platforms/javascript/guides/vue/](https://docs.sentry.io/platforms/javascript/guides/vue/) |
|
|
277
|
+
|
|
278
|
+
For trace stitching between Ruby backend and JS frontend, see `./tracing.md` → “Frontend
|
|
279
|
+
trace stitching”.
|
|
280
|
+
|
|
281
|
+
---
|
|
282
|
+
|
|
283
|
+
## Troubleshooting
|
|
284
|
+
|
|
285
|
+
| Issue | Solution |
|
|
286
|
+
| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
287
|
+
| Events not appearing | `config.debug = true`; verify DSN; ensure `Sentry.init` before first request |
|
|
288
|
+
| Rails exceptions missing | Must use `sentry-rails` — `sentry-ruby` alone doesn’t hook Rails error handlers |
|
|
289
|
+
| No traces (native) | Set `traces_sample_rate > 0`; ensure `sentry-rails` or `Sentry::Rack::CaptureExceptions` |
|
|
290
|
+
| No traces (OTLP) | Verify `opentelemetry-exporter-otlp` gem is installed; do **not** set `traces_sample_rate` when using `otlp.enabled = true` |
|
|
291
|
+
| Sidekiq jobs not traced | Add `sentry-sidekiq` gem |
|
|
292
|
+
| Missing request context | Set `config.send_default_pii = true` |
|
|
293
|
+
| Logs not appearing | Set `config.enable_logs = true`; sentry-ruby ≥ 5.27.0 required |
|
|
294
|
+
| Metrics not appearing | Check `enable_metrics` is not `false`; verify DSN |
|
|
295
|
+
| Events lost on shutdown | `Process.exit!` skips `at_exit` hooks — call `Sentry.flush` explicitly before forced exits |
|
|
296
|
+
| Forking server loses events | Puma/Unicorn fork workers — re-initialize in `on_worker_boot` or `after_fork`; without this, the background worker thread dies in child processes |
|
|
297
|
+
| DSN rejected / events not delivered | Verify DSN format: `https://<key>@o<org>.ingest.sentry.io/<project>`; set `config.debug = true` to see transport errors |
|