ملحوظة
اعتبارًا من 22 فبراير 2023 ، تقدم Vercel رسميًا وظائف CRON مدمجة لتشغيل وظائف الخادم والحافة. اقرأ الوثائق لمعرفة المزيد. ضع في اعتبارك أن الميزة مجانية فقط خلال مرحلة الإصدار التجريبي ، فستكون ميزة مدفوعة للتوافر العام ، مما يعني أن مسار إجراءات GitHub سيظل ذا صلة بخيار مجاني تمامًا.
وظائف cron مع إجراءات github لتطبيقات next.js على vercel ▲
نظرًا لأن منصة Vercel مدفوعة بالحدث ، وبالتالي عدم الحفاظ على خادم قيد التشغيل ، لا يمكنك حقًا جدولة المكالمات على طرق API أو وظائف بدون خادم في تطبيق Next.js الخاص بك. على الرغم من وجود العديد من الخدمات الموجودة مسبقًا التي توفر وظائف CRON المجدولة ، فقد قررت في النهاية أن إجراءات GitHub تناسب احتياجاتي بشكل أفضل ، لأنها تتكامل بشكل جيد مع أي مشروع يعيش بالفعل على Github ، بالإضافة إلى أنه مجاني تمامًا.
جميع إجراءات github موجودة في الدليل .github/workflows/ من مستودعك ويتم كتابته في YAML.
.github/workflows/starter.yaml هو العمل الأساسي لمساعدتك على البدء في الإجراءات.
مع الأحداث المجدولة ، يمكنك تنفيذ المهام على فترات محددة. على سبيل المثال ، يقوم سير العمل المقدم .github/workflows/scheduled.yaml ينفذ yaml طلب HTTP مع حليقة كل 60 دقيقة.
name : Hourly cron job
on :
schedule :
- cron : ' */60 * * * * '
jobs :
cron :
runs-on : ubuntu-latest
steps :
- name : Hourly cron job
run : |
curl --request POST
--url 'https://example.com/api/task'
--header 'Authorization: Bearer ${{ secrets.ACTION_KEY }}'إذا كنت تواجه مشكلة في كتابة تعبيرات جدول Cron ، ألق نظرة على Crontab Guru.
توفر مسارات API ووظائف الخادم حلاً مباشرًا لبناء API الخاص بك مع next.js على Vercel. يتم تعيين أي ملف داخل pages/api إلى /api/* وسيتم التعامل معه كنقطة نهاية API بدلاً من page .
إذا كنت تستخدم وظائف بدون خادم ، بغض النظر عن وقت التشغيل ، ستحتاج إلى وضع الملفات في /api/ الدليل في جذر مشروعك.
لتشغيل طرق API بشكل آمن ووظائف بدون خادم مع إجراءات github ، تحتاج إلى توفير مفتاح تفويض في رأس مكالمة API الخاصة بك ، والتي ، عند تنفيذها ، يتم مقارنة مفتاح المقابل في تطبيق Next.js الخاص بك.
يمكنك تحقيق ذلك عن طريق إضافة أسرار مشفرة إلى مستودع GitHub الخاص بك وتمريرها برأس طلب HTTP الخاص بك ، كما هو موضح في مقتطف الرمز السابق. إلى جانب إضافة مفتاح مستودع GitHub الخاص بك ، تحتاج أيضًا إلى الوصول إليه ضمن تطبيق Next.js ، ويفضل أن يكون ذلك من خلال متغيرات البيئة.
مثال pages/api/example.js تنفذ تدفق التفويض هذا.
export default function handler ( req , res ) {
const { APP_KEY } = process . env ;
const { ACTION_KEY } = req . headers . authorization . split ( " " ) [ 1 ] ;
try {
if ( ACTION_KEY === APP_KEY ) {
// Process the POST request
res . status ( 200 ) . json ( { success : 'true' } )
} else {
res . status ( 401 )
}
} catch ( err ) {
res . status ( 500 )
}
} استخدم pages/api/example.ts لـ TypeScript.
import type { NextApiRequest , NextApiResponse } from 'next'
export default function handler ( req : NextApiRequest , res : NextApiResponse ) {
const { APP_KEY } = process . env ;
const { ACTION_KEY } = req . headers . authorization . split ( " " ) [ 1 ] ;
try {
if ( ACTION_KEY === APP_KEY ) {
// Process the POST request
res . status ( 200 ) . json ( { success : 'true' } )
} else {
res . status ( 401 )
}
} catch ( err ) {
res . status ( 500 )
}
}