אפשרויות של שרת פיתוח מקומי

שרת הפיתוח המקומי (dev_appserver.py) הוא חלק מרכיבי App Engine של ה-CLI של gcloud. בנושא הזה מופיע מידע מתקדם על השימוש ב-dev_appserver.py.

מומלץ להשתמש בכלים סטנדרטיים של Python, כמו 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.yaml skip_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, מציינים את הדגל הזה.