שרת הפיתוח המקומי (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 שמוגדר כברירת מחדל (ברירת מחדל: None).
--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מאפשרת גישה ל-localhost וגישה באמצעות כתובת 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, מציינים את הדגל הזה.