Astro on Cloudflare
Cloudflare PagesにAstroをデプロイして、POSTを処理するためにFunctionsを使いたいけどうまくいかない。
Gitでデプロイするのがうまくいかないので、wranglerを使ってデプロイしてみる。
よくわからんがgcloudみたいなもんやろ。
とりあえず npm install wrangler --save-dev
でインストール。
npx wrangler pages download config <pages name>
で既存の設定を wrangler.toml
に落としてくれる。認証も勝手にブラウザ開いてやってくれる。
npx wrangler pages deploy
を実行してみる。
DeploymentのRouting configurationになんか出てきたのでデプロイはできたっぽい。
{
"baseURL": "/",
"routes": [
{
"method": "",
"module": [
"helloworld.js:onRequest"
],
"mountPath": "/",
"routePath": "/helloworld"
}
]
}
だがまだ curl https://example.com/helloworld
叩いても静的生成した 404.html が返ってくる
astro.config.mjs
に include
を追加してみても、dist/_routes.json
を消してデプロイしてみても変わらず。うーむ
adapter: cloudflare({
imageService: "compile",
routes: {
extend: {
include: [{ pattern: "/helloworld" }],
},
},
}),
routingされない問題は解決してないが、functionsは dist/functions
になくてもいいらしい。
"build": "astro build && cp -r functions dist/functions"
してたけど、cpしなくても wrangler pages deploy
だとhelloworld deployされてた。
npm create astro@latest
してfunctions/helloworld.js
追加しただけのプロジェクトはgit connectで成功
$ curl https://hogehoge.pages.dev/helloworld
Hello, world!
cloudflare adapter使うとfunctionsがデプロイされなくなった。
adapterを動かすためにいれた output: "hybrid"
が原因か?
adapterなしでhybridを試そうとしたけど、hybridはadapterが必須らしい。
22:36:25.741 13:36:25 [build] ✓ Completed in 96ms.
22:36:26.002 [NoAdapterInstalled] Cannot use `output: 'server'` or `output: 'hybrid'` without an adapter. Please install and configure the appropriate server adapter for your final deployment.
22:36:26.002 Hint:
22:36:26.003 See https://docs.astro.build/en/guides/server-side-rendering/ for more information.
22:36:26.003 Error reference:
22:36:26.003 https://docs.astro.build/en/reference/errors/no-adapter-installed/
22:36:26.003 Stack trace:
22:36:26.003 at viteBuild (file:///opt/buildhome/repo/node_modules/astro/dist/core/build/static-build.js:42:11)
22:36:26.003 at async AstroBuilder.run (file:///opt/buildhome/repo/node_modules/astro/dist/core/build/index.js:182:7)
22:36:26.004 at async build (file:///opt/buildhome/repo/node_modules/astro/dist/cli/build/index.js:24:3)
22:36:26.004 at async cli (file:///opt/buildhome/repo/node_modules/astro/dist/cli/index.js:175:5)
22:36:26.117 Failed: Error while executing user command. Exited with error code: 1
22:36:26.127 Failed: build command exited with code: 1
22:36:27.401 Failed: error occurred while running build command
元プロジェクトからも output: "hybrid"
と cloudflare adapter を削除したら万事うまくいった。
Astro に乗っかって hybrid で動的処理するには src/pages/api/helloworld.js
を使えってことなんだろうな。試してないけど