Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SvelteKit Cloudflare adapter failing #8291

Open
3 tasks done
Tracked by #12620
lucasnad27 opened this issue Jun 5, 2023 · 23 comments
Open
3 tasks done
Tracked by #12620

SvelteKit Cloudflare adapter failing #8291

lucasnad27 opened this issue Jun 5, 2023 · 23 comments
Labels
Package: sveltekit Issues related to the Sentry SvelteKit SDK Platform: Cloudflare Workers Type: Bug

Comments

@lucasnad27
Copy link

Is there an existing issue for this?

How do you use Sentry?

Sentry Saas (sentry.io)

Which SDK are you using?

@sentry/sveltekit

SDK Version

7.54.0

Framework Version

@sveltejs/kit == 1.20.0

Link to Sentry event

No response

SDK Setup

hooks.client.ts...

Sentry.init({
	dsn: config.sentryDSN,
	environment: config.env,
	tracesSampleRate: 1,
	replaysSessionSampleRate: 0.1,
	replaysOnErrorSampleRate: 1,
	integrations: [new Sentry.Replay()]
});

hooks.server.ts

Sentry.init({
	dsn: config.sentryDSN,
	environment: config.env,
	tracesSampleRate: 1
});

Steps to Reproduce

  1. manually setup the sveltekit + sentry integration
  2. verify it's working locally
  3. install adapter-cloud flare and update svelte.config.ts according to sveltekit documentation -- partial example provided below.
  4. deploy to cloudflare (can't easily give you a way to reproduce this portion, but let me know if I can additional details

sample svelte.config.js

import adapter from '@sveltejs/adapter-cloudflare';
import { vitePreprocess } from '@sveltejs/kit/vite';

/** @type {import('@sveltejs/kit').Config} */
const config = {
	// Consult https://kit.svelte.dev/docs/integrations#preprocessors
	// for more information about preprocessors
	preprocess: vitePreprocess(),
	kit: {
		adapter: adapter()
};

export default config;

Expected Result

Successful build & deploy from cloudflare pages

Actual Result

16:37:00.142 | > Using @sveltejs/adapter-cloudflare
-- | --
16:37:00.627 | ✘ [ERROR] Could not resolve "$app/stores"
16:37:00.628 |  
16:37:00.628 | node_modules/.pnpm/@sentry+sveltekit@7.54.0_@sveltejs+kit@1.20.0_svelte@3.59.1/node_modules/@sentry/sveltekit/esm/client/router.js:3:33:
16:37:00.628 | 3 │ import { page, navigating } from '$app/stores';
16:37:00.628 | ╵                                  ~~~~~~~~~~~~~
16:37:00.628 |  
16:37:00.629 | You can mark the path "$app/stores" as external to exclude it from the bundle, which will remove this error.
16:37:00.629 |  
16:37:01.102 | error during build:
16:37:01.103 | Error: Build failed with 1 error:
16:37:01.104 | node_modules/.pnpm/@sentry+sveltekit@7.54.0_@sveltejs+kit@1.20.0_svelte@3.59.1/node_modules/@sentry/sveltekit/esm/client/router.js:3:33: ERROR: Could not resolve "$app/stores"
@lucasnad27
Copy link
Author

Looks like others have previously reported, but I couldn't find a dedicated issue to track.

#6692 (comment)

@Wobbley
Copy link

Wobbley commented Jun 7, 2023

I just came across this issue myself, is there a workaround for Cloudflare pages? Setting the autoInstrument: false did not work for me.

I wanted to try using Sentry for catching errors and issues but this seems like a complete blocker sadly.

EDIT: To be fair I just noticed it states

The SvelteKit SDK does not yet work with non-node server runtimes, such as Vercel's edge runtime or Cloudflare Workers.

in the docs, so that's on me.

@lucasnad27
Copy link
Author

I'm assuming they have plans to support cloudflare workers/pages in the near future, but might not be at the top of their priority list. Hopefully soon though 🤞🏼

@AbhiPrasad
Copy link
Member

On our backlog to take a look at, but we need to figure out why this is breaking if you turn off autoInstrument.

In the meantime, you can just add @sentry/svelte to just monitor your frontend while we work on fixing the cloudflare side of things. Thanks for your patience everyone!

@lucasnad27
Copy link
Author

thanks @AbhiPrasad -- lmk if you need someone to test. In the meantime, I'll keep an eye out for any updates :)

@matindow
Copy link

I don't know if this is particularly helpful, but in my testing it fails with this error only with either autoInstrument: true or with @sentry/sveltekit init in the hooks.server.js. The build steps and client side init + error handler seem to work fine, which makes sense, because the load function/server hook are the only pieces running directly on the cloudflare worker, with the other code running either on the build machine or the client's browser. Or that is my understanding?

So, currently I am using toucan-js in the hooks.server.js to init and then capturing errors with its Sentry.captureException() manually in the handleError function (i'm not currently monitoring my load function, but i assume i could similarly use toucan to accomplish the same thing).

@Lms24
Copy link
Member

Lms24 commented Jun 19, 2023

@matindow what you're describing sounds about right to me. You can't use @sentry/sveltekit on the server side (i.e. in clodflare workers) because it uses @sentry/node internally, which isn't compatible with the cloudflare worker runtime. So using toucan-js as an alternative for the server should be totally fine for the time being :)

@lucasnad27
Copy link
Author

good to know toucan-js is a possibility if I need an escape hatch in case cloudflare support isn't available when I need server-side sentry.

@lucasnad27
Copy link
Author

Escape hatch has been used :) Just want to keep this ticket warm. It will be really nice to use the official sveltekit + sentry integration when it's ready 😻 but for now....ToucanJS seems to be sufficient so far 😎

@AbhiPrasad
Copy link
Member

@lucasnad27 we've started looking at #8693, which should hopefully help build the infrastructure for better support here!

thanks for your patience, appreciate you checking in!

@Lms24
Copy link
Member

Lms24 commented Oct 21, 2023

Hey @jill64 thanks for doing this! Took a quick look and IMO it's a solid workaround until there's proper support from our end. Thank you!

I wonder if we can solve the import { page, navigating } from '$app/stores' error mentioned above as I believe that's sort of blocking the client-side routing instrumentation. Did you try adding our SvelteKit routing instrumentation to BrowserTracing?

@jill64
Copy link

jill64 commented Oct 22, 2023

No, I have not tried it yet, but I believe it is possible.
Since it depends on @sentry/node, it is not possible to import from the @sentry/sveltekit package, but I will try to extract and implement the necessary functionality.

@MarArMar
Copy link

Thanks so much for the suggestion Jill ! I have postponed my move to cloudflare but once it s again on the table your repo will be probably the way for us, so thank you so much for your work 👍

@wbhob
Copy link

wbhob commented Oct 25, 2023

For what it's worth, this issue also blocks using Sentry in Vercel Edge Functions, since it's also not a full Node environment.

helblinglilly added a commit to helblinglilly/pokecompanion that referenced this issue Nov 19, 2023
See getsentry/sentry-javascript#8291
Currently not supported in non-node environments
@MarArMar
Copy link

MarArMar commented Dec 8, 2023

Any news or workaround on this ?

@jill64
Copy link

jill64 commented Dec 9, 2023

As a workaround, @jill64/sentry-sveltekit-cloudflare is still available.
@jill64/sentry-sveltekit-edge is also available, which works with vercel, netlify, and other edges in general, although some functionality is limited.

@ZetiMente
Copy link

ZetiMente commented Dec 21, 2023

As a workaround, @jill64/sentry-sveltekit-cloudflare is still available. @jill64/sentry-sveltekit-edge is also available, which works with vercel, netlify, and other edges in general, although some functionality is limited.

@jill64 Thanks for the support !

@saturnonearth
Copy link

Any movement on this?

@AbhiPrasad
Copy link
Member

We're currently working on our next major version (#9802) which is taking all of the maintainers bandwidth currently. Some of the planned API changes/increased OpenTelemetry support should help with cloudflare support generally.

Otherwise there is workaround in #8291 (comment), or with https://github.com/robertcepa/toucan-js

@knd775
Copy link

knd775 commented Jun 19, 2024

Can this be revisited now that the v8 SDK has been released?

@saturnonearth
Copy link

Can this be revisited now that the v8 SDK has been released?

I believe this is being tracked in:
#2484

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Package: sveltekit Issues related to the Sentry SvelteKit SDK Platform: Cloudflare Workers Type: Bug
Projects
Status: No status
Status: No status
Status: No status
Development

No branches or pull requests