שרת הפיתוח המקומי (dev_appserver.py) הוא חלק מרכיבי App Engine של ה-CLI של gcloud. בנושא הזה מופיע מידע מתקדם על השימוש ב-dev_appserver.py.
virtualenv כדי ליצור סביבות מבודדות ו-pytest כדי להריץ בדיקות יחידה ובדיקות שילוב, במקום להסתמך על dev_appserver, שרת הפיתוח המקומי שמסופק עם Google Cloud SDK.
מידע נוסף על בדיקות מקומיות זמין במאמר שימוש בשרת פיתוח מקומי.
הגדרת כלי שרת פיתוח מקומי
דוגמה לפקודת dev_appserver.py:
python3 CLOUD_SDK_ROOT/bin/dev_appserver.py OPTION yaml_path FILES
מחליפים את מה שכתוב בשדות הבאים:
- CLOUD_SDK_ROOT עם הנתיב לספריית הבסיס שבה התקנתם את Google Cloud CLI. ספריית ברירת המחדל היא
./google-cloud-sdk/. - OPTION עם דגל שנתמך על ידי שרת הפיתוח המקומי.
- FILES מציין קובץ אחד או יותר של
app.yaml, אחד לכל שירות, לארגומנט תלוי המיקוםyaml_path.
כדי לראות את רשימת האפשרויות המלאה, מריצים את הפקודה הבאה:
python3 CLOUD_SDK_ROOT/bin/dev_appserver.py -h
אפשרויות נפוצות
האפשרויות הנפוצות ביותר הן:
--admin_host=ADMIN_HOST- שם המארח שאליו צריך לקשר את מסוף הניהול של שרת הפיתוח המקומי (ברירת מחדל: localhost).
--admin_port=ADMIN_PORT- היציאה שאליה צריך לקשור את מסוף הניהול של שרת הפיתוח המקומי (ברירת מחדל: 8000).
--addn_host=ADDN_HOST- הארגומנט הזה מאפשר להוסיף ערכים לרשימת ההיתרים של כותרת המארח של HTTP, כדי שהשרת יהיה נגיש מאחורי שרת proxy, בלי להשבית את בדיקת המארח (ראו
--enable_host_checking). מארחים נוספים שמתחילים ב-*.מאפשרים את כל תת-הדומיינים. לדוגמה,*.example.orgמאפשרhost.example.orgאבל לאsub.host.example.orgאוexample.org. מארחים שמתחילים ב-**.מאפשרים שימוש בתת-דומיינים בכל רמה. לדוגמה,**.example.comמאפשרhost.example.comו-sub.host.example.com, אבל לאexample.com. (ברירת מחדל: []) --allow_skipped_files=...- הפיכת הקבצים שצוינו ב-
app.yamlskip_filesאו ב-staticלניתנים לקריאה על ידי האפליקציה (ברירת מחדל: False). -A APP_ID, --application=...- הגדרת האפליקציה, תוך ביטול הערך של האפליקציה מהקובץ
app.yaml(ברירת מחדל: None). --appidentity_email_address=...
- כתובת האימייל שמשויכת לחשבון שירות שיש לו מפתח שאפשר להוריד.
יכול להיות
Noneאם אין זהות מקומית של האפליקציה (ברירת מחדל: None). --appidentity_private_key_path=...
- נתיב לקובץ מפתח פרטי המשויך לחשבון שירות (
.pemפורמט). חובה להגדיר את הערך הזה אם הערך שלappidentity_email_addressמוגדר (ברירת מחדל: None). --api_host=API_HOST- שם המארח שאליו שרת ה-API צריך להיות משויך (ברירת מחדל: localhost).
--api_port=API_PORT- היציאה שאליה השרת לקריאות ל-API צריך להיקשר (ברירת מחדל: 0).
--auth_domain=...- שם הדומיין של ההרשאה לשימוש (ברירת מחדל:
gmail.com). --auto_id_policy=...- הוצא משימוש. איך מאגר הנתונים המקומי מקצה מזהים אוטומטיים. האפשרויות הן
sequentialאוscattered(ברירת מחדל:scattered). --automatic_restart=...- הפעלה מחדש של מופעים באופן אוטומטי כשקבצים שרלוונטיים למודול שלהם משתנים (ברירת מחדל: True).
--blobstore_path=...- הנתיב לספרייה שמשמשת לאחסון תוכן ה-Blob (ברירת המחדל היא ספריית משנה של
--storage_pathאם לא מוגדר) (ברירת מחדל: None). --clear_datastore=yes|no- מנקה את הנתונים במאגר הנתונים ואת קובצי ההיסטוריה לפני הפעלת שרת האינטרנט (ברירת מחדל:
no). --clear_search_indexes...- ניקוי אינדקסים של חיפושים (ברירת מחדל: False).
--custom_entrypoint=...מציינים נקודת כניסה למודולים של סביבת זמן ריצה בהתאמה אישית. זה נדרש אם יש מודולים כאלה. כוללים את
{port}במחרוזת (ללא מרכאות) כדי להעביר את מספר היציאה כארגומנט (ברירת מחדל: ). לדוגמה:--custom_entrypoint="gunicorn -b localhost:{port} mymodule:application"--datastore_consistency_policy {consistent,random,time}המדיניות שחלה כשמחליטים אם פעולת כתיבה במאגר נתונים צריכה להופיע בשאילתות גלובליות (ברירת מחדל: זמן).
--datastore_emulator_cmd=...הנתיב לסקריפט שמפעיל את האמולטור של Cloud Datastore. אם לא מציינים ערך,
dev_appserverינסה למצוא את אמולטור מאגר הנתונים ב-Google Cloud SDK (ברירת מחדל: None).--datastore_emulator_port=...מספר היציאה שבו dev_appserver צריך להפעיל את אמולטור Cloud Datastore (ברירת מחדל: 0).
--datastore_path=...הנתיב שבו יש להשתמש עבור קובץ הנתונים של מאגר הנתונים המקומי. השרת יוצר את הקובץ הזה אם הוא לא קיים.
--default_gcs_bucket_name=...שם ברירת המחדל של קטגוריית Cloud Storage (ברירת מחדל: ללא).
--dev_appserver_log_level {debug,info,warning,critical,error}רמת היומן שמתחתיה הודעות הרישום שנוצרו על ידי שרת הפיתוח לא יוצגו במסוף (הדגל הזה שימושי יותר לאבחון בעיות ב-
dev_appserver.pyמאשר בקוד האפליקציה) (ברירת מחדל: info).--enable_host_checking=yes|noקובעת אם לאכוף את
HTTPבדיקת המארח עבור מודולים של אפליקציות, שרת API ושרת אדמין. בדיקת המארח מגנה מפני התקפות DNS Rebinding. כדאי להשבית אותה רק אחרי שמבינים את ההשלכות על האבטחה (ברירת מחדל: True).--enable_console=yes|noהפעלה של מסוף אינטראקטיבי בתצוגת אדמין (ברירת מחדל: False).
--enable_sendmail=yes|noההגדרה הזו קובעת אם להשתמש בהתקנה של
Sendmailבמחשב המקומי לשליחת הודעות אימייל.--enable_task_running=yes|noההגדרה הזו מאפשרת לשרת הפיתוח להריץ משימות push (ברירת מחדל:
yes). אם מצייניםno, השרת לא יריץ משימות push.--env_var=...משתנה סביבה שהמשתמש מגדיר לתהליך זמן הריצה המקומי. כל
env_varהוא בפורמטkey=value, ואפשר להגדיר כמה משתני סביבה. בנוסף ל-env_variablesב-app.yaml, הדגל הזה מאפשר להגדיר משתני סביבה נוספים לתהליכים מקומיים.לדוגמה:
--env_var KEY_1=val1 --env_var KEY_2=val2--grpc_api_port...היציאה שבה שרת ה-API של
gRPCמאזין (ברירת מחדל:0).--helpמדפיסה הודעה מועילה ואז יוצאת.
--host=...כתובת המארח שבה יש להשתמש עבור השרת. יכול להיות שתצטרכו להגדיר את זה כדי לקבל גישה לשרת הפיתוח ממחשב אחר ברשת. כתובת
0.0.0.0מאפשרת גישה למארח המקומי וגישה לכתובת IP או לשם מארח (ברירת מחדל:localhost).--log_level=...רמת הרישום הנמוכה ביותר שבה הודעות הרישום ייכתבו למסוף. הודעות ברמת הרישום שצוינה או ברמה גבוהה יותר יוצגו. הערכים האפשריים הם
debug,info,warning,errorו-critical.--logs_path=...כברירת מחדל, היומנים של שרת הפיתוח המקומי מאוחסנים רק בזיכרון. מציינים את האפשרות הזו כשמריצים את שרת הפיתוח המקומי כדי לאחסן את היומנים בקובץ, וכך היומנים זמינים גם אחרי הפעלה מחדש של השרת. צריך לציין את הנתיב והשם של קובץ מסד נתונים של SQLite. אם הקובץ לא קיים, נוצר קובץ מסד נתונים של SQLite עם השם שצוין.
לדוגמה:
--logs_path=/home/logs/boglogs.db--max_module_instances=...מספר המופעים המקסימלי של זמן הריצה שאפשר להפעיל עבור מודול מסוים. הערך יכול להיות מספר שלם, ובמקרה כזה כל המודולים מוגבלים למספר המופעים, או רשימה מופרדת בפסיקים של
module:max_instances(ברירת מחדל: None). לדוגמה:default:5,backend:3--mysql_host=MYSQL_HOSTשם המארח של שרת MySQL פעיל שמשמש לאחסון מדומה ב-Cloud SQL (ברירת מחדל: localhost).
--mysql_port=MYSQL_PORTמספר היציאה של שרת MySQL פעיל שמשמש לאחסון מדומה ב-Cloud SQL (ברירת מחדל: 3306).
--mysql_user=MYSQL_USERשם המשתמש שבו יש להשתמש כשמתחברים לשרת MySQL שצוין ב-
--mysql_hostוב---mysql_portאו ב---mysql_socket(ברירת מחדל: ).--mysql_password=MYSQL_PASSWORDהסיסמה לשימוש כשמתחברים לשרת MySQL שצוין ב-
--mysql_hostוב---mysql_portאו ב---mysql_socket(ברירת מחדל: ).--mysql_socket=MYSQL_SOCKETהנתיב לקובץ socket של Unix שבו יש להשתמש כשמתחברים לשרת MySQL פעיל שמשמש לאחסון מדומה ב-Cloud SQL (ברירת מחדל: None).
--port=...מספר היציאה לשימוש בשרת. ברירת המחדל היא
8080. אם מפעילים כמה שרתים, למשל עבור שירותים, יוקצו להם יציאות עוקבות, כמו8081,8082.--require_indexes=yes|noההגדרה הזו משביתה את היצירה האוטומטית של רשומות בקובץ
index.yaml. במקום זאת, כשמועברת שאילתה באפליקציה שדורשת שהאינדקס שלה יוגדר בקובץ, ואם הגדרת האינדקס לא נמצאת, תופעל חריגה, בדומה למה שקורה כשמריצים ב-App Engine (ברירת מחדל:no).--runtime=...מציינים את סביבות זמן הריצה שרוצים להשתמש בהן כברירת מחדל. רשימת זמני הריצה הנתמכים מופיעה בלוח הזמנים של תמיכה בזמני ריצה.
--running_datastore_emulator_host=...ההגדרה הזו מבטלת את משתנה הסביבה DATASTORE_EMULATOR_HOST, כלומר את
hostname:portשל אמולטור Cloud Datastore שפועל שאפשר להתחבר אליו (ברירת מחדל: None).dev_appserver--search_indexes_path=...נתיב לקובץ שמשמש לאחסון אינדקסים של חיפוש (ברירת המחדל היא קובץ ב-
--storage_pathאם לא מוגדר) (ברירת מחדל:None).--skip_sdk_update_check=...דילוג על בדיקת עדכונים של SDK (אם הערך הוא False, נעשה שימוש ב-
.appcfg_nagכדי לקבוע) (ברירת מחדל: False).--show_mail_body=...מתעד את התוכן של אימיילים שנשלחים באמצעות Mail API (ברירת מחדל: False).
--smtp_allow_tls...מאפשר שימוש ב-TLS כשהשרת SMTP מכריז על תמיכה ב-TLS (ההגדרה מתעלמת אם לא מוגדר --smtp_host) (ברירת מחדל: True).
--smtp_host=...שם המארח של שרת ה-SMTP שמשמש לשליחת הודעות אימייל.
--smtp_port=...מספר היציאה של שרת ה-SMTP שבו יש להשתמש לשליחת הודעות אימייל.
--smtp_user=...שם המשתמש שמשמש את שרת ה-SMTP לשליחת הודעות אימייל.
--smtp_password=...הסיסמה לשימוש עם שרת ה-SMTP לשליחת הודעות אימייל.
--storage_path=...הנתיב שבו יאוחסנו כל הקבצים המקומיים, כמו Datastore, Blobstore, קבצים ויומנים של Cloud Storage, אלא אם הנתיב הזה מוחלף על ידי
--datastore_path,--blobstore_pathאו--logs_path.--support_datastore_emulator=yes|noאפשר להשתמש באמולטור Cloud Datastore (בטא) כדי לבצע אמולציה של מאגר נתונים מקומי.
--ssl_certificate_path=...הנתיב לאישור SSL. אם משתמשים באפשרות הזו, צריך לספק גם את
--ssl_certificate_key_path(ברירת מחדל: None).--ssl_certificate_key_path=...נתיב למפתח פרטי תואם של SSL. אם משתמשים באפשרות הזו, צריך לספק גם את
--ssl_certificate_path(ברירת מחדל: None).--threadsafe_override=...החלפת ההגדרה של האפליקציה לגבי בטיחות בשרשור. הערך יכול להיות בוליאני, ובמקרה כזה ההגדרה של כל המודולים לגבי בטיחות בשרשור תוחלף, או רשימה מופרדת בפסיקים של
module:threadsafe_override(ברירת מחדל: None).לדוגמה:
default:False,backend:True--use_mtime_file_watcher=...שימוש בסקר mtime כדי לזהות שינויים בקוד המקור – שימושי אם משנים קוד ממחשב מרוחק באמצעות מערכת קבצים מבוזרת (ברירת מחדל: False).
--watcher_ignore_re=...מחרוזת Regex לציון קבצים שהכלי למעקב אחרי קבצים יתעלם מהם. (ברירת מחדל: ללא)
אפשרויות ספציפיות ל-Python
אפשרויות פקודה ספציפיות לזמן הריצה של Python:
--python_startup_script- הסקריפט שיופעל בהפעלה של מופעים חדשים של זמן ריצה של Python (שימושי לכלים כמו מנפי באגים) (ברירת מחדל: None).
--python_startup_args- הארגומנטים שזמינים לסקריפט שצוין ב-
python_startup_script(ברירת מחדל: None). --python27_executable_path=...- הנתיב לקובץ ההפעלה python27 עבור מופעי זמן ריצה של python27 (ברירת מחדל: None).
--python_virtualenv_path- הנתיב לספרייה שמשמשת להגדרת סביבה וירטואלית של Python 3 עבור סביבת ההפעלה המקומית של devappserver לאפליקציות Python 3. אם הנתיב לא קיים, הספרייה נוצרת, אבל היא לא תימחק בסוף ההפעלה של devappserver, כך שניתן יהיה לשמור במטמון בין הפעלות. אם לא מגדירים את המאפיין, המערכת תשתמש בספרייה זמנית ותנקה אותה בסיום ההפעלה.
--runtime_python_path=...
- הנתיב לקובץ הבינארי של Python. כדי להריץ אפליקציית Python ב-
dev_appserver, מציינים את הדגל הזה.