1. บทนำ
ในห้องทดลองนี้ คุณจะใช้ Gemini Code Assist ซึ่งเป็นผู้ช่วยที่ทำงานด้วยระบบ AI ใน Google Cloud เพื่อเพิ่มการทดสอบไปยังเว็บแอปพลิเคชัน Python ที่มีอยู่ รวมถึงค้นหาและแก้ไขข้อผิดพลาดในแอปพลิเคชันนั้นที่เปิดเผยจากการทดสอบ จากนั้นคุณจะใช้ Code Assist เพื่อสร้างการทดสอบสำหรับฟังก์ชันการทำงานใหม่ๆ และสร้างโค้ดเพื่อผ่านการทดสอบเหล่านั้นและขยายแอป
สิ่งที่จะต้องทำ...
- คุณจะใช้ Cloud Shell Editor เพื่อดาวน์โหลดโค้ดสำหรับเว็บแอปพลิเคชันที่มีอยู่
- คุณจะใช้ Gemini Code Assist Chat ใน Cloud Shell Editor เพื่อถามคำถามทั่วไปเกี่ยวกับ Google Cloud
- คุณจะใช้ความช่วยเหลือเกี่ยวกับโค้ดในบรรทัดของ Gemini Code Assist ใน Cloud Shell Editor เพื่อสร้างการทดสอบสำหรับแอปพลิเคชัน เรียกใช้การทดสอบ รวมถึงค้นหาและแก้ไขข้อผิดพลาด จากนั้นจึงขยายฟังก์ชันการทำงานของแอปพลิเคชัน
สิ่งที่คุณจะได้เรียนรู้...
- วิธีใช้ Gemini Code Assist ในงานต่างๆ ของนักพัฒนาซอฟต์แวร์ เช่น การสร้างการทดสอบและการสร้างโค้ด
- วิธีใช้ Gemini Code Assist เพื่อเรียนรู้เกี่ยวกับ Google Cloud
สิ่งที่คุณต้องมี...
- เว็บเบราว์เซอร์ Chrome
- บัญชี Gmail
- โปรเจ็กต์ที่อยู่ในระบบคลาวด์ที่เปิดใช้การเรียกเก็บเงิน
- เปิดใช้ Gemini Code Assist สำหรับโปรเจ็กต์ระบบคลาวด์ของคุณแล้ว
ห้องทดลองนี้มุ่งเป้าไปที่นักพัฒนาซอฟต์แวร์ทุกระดับ รวมถึงผู้เริ่มต้น แม้ว่าแอปพลิเคชันตัวอย่างจะเป็นภาษา Python แต่คุณไม่จำเป็นต้องทำความคุ้นเคยกับการเขียนโปรแกรม Python เพื่อที่จะเข้าใจว่าเกิดอะไรขึ้น เราจะมุ่งเน้นที่การทำความคุ้นเคยกับความสามารถของ Gemini Code Assist สำหรับนักพัฒนาซอฟต์แวร์
2. ตั้งค่า
คุณควรมีโปรเจ็กต์ที่อยู่ในระบบคลาวด์ที่เปิดใช้การเรียกเก็บเงินอยู่แล้วเพื่อใช้กับห้องทดลองนี้ ตอนนี้เราจะเปิดใช้ Gemini API ในโปรเจ็กต์ Google Cloud โปรดทำตามขั้นตอนที่ระบุไว้ด้านล่าง
- ไปที่ https://console.cloud.google.com และตรวจสอบว่าได้เลือกโปรเจ็กต์ Google Cloud ที่คุณวางแผนจะทํางานด้วยสําหรับ Lab นี้ คลิกไอคอน Gemini ที่คุณเห็นที่ด้านขวาบน
- หน้าต่าง Gemini สำหรับ Cloud Console จะเปิดขึ้นทางด้านขวาของคอนโซล คลิกปุ่มเปิดใช้หากแสดงอยู่ด้านล่าง หากไม่เห็นปุ่มเปิดใช้และเห็นอินเทอร์เฟซ Chat แทน แสดงว่าคุณได้เปิดใช้ Gemini สำหรับ Cloud สำหรับโปรเจ็กต์แล้ว และไปยังขั้นตอนถัดไปได้โดยตรง
- เมื่อเปิดใช้แล้ว คุณจะทดสอบ Gemini ได้โดยการถามคำค้นหาสัก 1-2 คำ คุณจะเห็นการค้นหาตัวอย่าง 2-3 รายการ แต่คุณสามารถลองใช้คำถามอย่างเช่น Cloud Run คืออะไร
Code Assist จะตอบคำถามของคุณ คุณคลิกไอคอน ที่มุมขวาบนเพื่อปิดหน้าต่างแชทของ Code Assist ได้
เปิดใช้ Gemini ใน Cloud Shell Editor
Gemini Code Assist นั้นใช้งานได้และทำงานคล้ายกับใน IDE ยอดนิยมหลายรายการ คุณจะใช้ Google Cloud Shell Editor ซึ่งทำงานในเว็บเบราว์เซอร์ได้อย่างสมบูรณ์ใน Codelab นี้ คุณต้องเปิดใช้และกำหนดค่า Gemini ใน Cloud Shell Editor โดยดูขั้นตอนด้านล่างนี้
- เปิดใช้ Cloud Shell ผ่านไอคอนด้านล่าง อาจใช้เวลา 1-2 นาทีในการเริ่มต้นอินสแตนซ์ Cloud Shell
- คลิกปุ่มตัวแก้ไขหรือเปิดเครื่องมือแก้ไข (ตามแต่ละกรณี) แล้วรอจนกว่า Cloud Shell Editor ปรากฏขึ้น หากเห็นปุ่มลองใช้เครื่องมือแก้ไขใหม่ ให้คลิกปุ่มนั้น
- คลิกปุ่ม Cloud Code - Sign inในแถบสถานะด้านล่างตามที่แสดง ให้สิทธิ์ปลั๊กอินตามคำแนะนำ หากเห็น "Cloud Code - ไม่มีโปรเจ็กต์" ในแถบสถานะ ให้เลือกโปรเจ็กต์ดังกล่าวแล้วเลือกโปรเจ็กต์ Google Cloud ที่ต้องการจากรายการโปรเจ็กต์ที่คุณวางแผนจะทำงานด้วย
- หากไม่เห็นไอคอน Gemini ในแถบสถานะด้านขวาล่าง คุณจะต้องเปิดใช้ใน Cloud Code ก่อนที่จะดำเนินการ โปรดตรวจสอบว่าได้เปิดใช้ Gemini (ก่อนหน้านี้เรียกว่า Duet AI สำหรับนักพัฒนาซอฟต์แวร์) ใน IDE โดยไปที่ส่วนขยาย Cloud Code → การตั้งค่า แล้วป้อนข้อความ Duet AI: เปิดใช้ตามที่แสดงด้านล่าง ตรวจสอบว่าได้เลือกช่องทำเครื่องหมายแล้ว คุณควรโหลด IDE ซ้ำ การดำเนินการนี้จะเปิดใช้ Gemini ใน Cloud Code และแถบสถานะ Gemini จะปรากฏใน IDE ของคุณ
- คลิกปุ่ม Gemini ที่มุมขวาล่างตามที่แสดง และเลือกโปรเจ็กต์ Google Cloud ที่ถูกต้องซึ่งเราเปิดใช้ Cloud AI Companion API
- เมื่อเลือกโปรเจ็กต์ Google Cloud โปรดตรวจสอบว่าคุณเห็นว่าในข้อความสถานะ Cloud Code ในแถบสถานะและได้เปิดใช้ Gemini ไว้ทางด้านขวาในแถบสถานะดังที่แสดงด้านล่างนี้
Gemini Code Assist พร้อมใช้งานแล้ว
3. ดาวน์โหลดและตรวจสอบแอปพลิเคชัน
ในหน้าต่างเทอร์มินัล ให้เรียกใช้คำสั่งเพื่อโคลนที่เก็บด้วยโค้ดเริ่มต้น จากนั้นเปลี่ยนเป็นไดเรกทอรีใหม่ (หากหน้าต่างเทอร์มินัลไม่เปิดขึ้น ให้คลิกปุ่มเทอร์มินัลหรือเปิดเทอร์มินัลเพื่อคืนค่า)
git clone https://github.com/GoogleCloudPlatform/testing-with-duet-ai-codelab.git
cd testing-with-duet-ai-codelab
เปิด main.py ในตัวแก้ไข จากนั้นเปิดหน้าต่าง Gemini Chat โดยคลิกไอคอนแชท Gemini ทางด้านซ้ายของเครื่องมือแก้ไข หน้าต่าง Gemini Chat นี้อยู่ภายใน IDE และมีโค้ดใน IDE เป็นบริบทสำหรับการสนทนา ป้อนพรอมต์อธิบายเรื่องนี้และดูคำตอบ
คุณสามารถเลื่อนหน้าต่างแชทนี้เพื่อดูคำตอบทั้งหมด คำอธิบายระบุว่าเราสามารถเรียกใช้โปรแกรมนี้ภายในเครื่องด้วยคำสั่ง python3 main.py
ในหน้าต่างเทอร์มินัล
4. เรียกใช้ภายในเครื่อง
เปลี่ยนเป็นไดเรกทอรีที่เก็บด้วย cd ~/testing-with-duet-ai-codelab
หากจำเป็น และป้อนคำสั่ง python3 main.py
ในหน้าต่างเทอร์มินัล:
คลิกลิงก์ http://127.0.0.1:8080 เพื่อเปิดแท็บใหม่ของเบราว์เซอร์ไปยังหน้าแรกของแอปพลิเคชัน:
แอปพลิเคชันกำลังทำงาน "ในเครื่อง" อันที่จริง Cloud Shell Editor ได้ทำอะไรบางอย่างลงไปเล็กน้อย แอปพลิเคชันกำลังทำงานใน Cloud Shell ไม่ใช่ในคอมพิวเตอร์ของคุณเอง เมื่อคลิกลิงก์ แท็บจะเปิดแท็บที่ไม่ใช่ที่อยู่จริงในเครื่อง http://127.0.0.1:8080 แต่ไปยังพร็อกซีเซิร์ฟเวอร์ที่ Cloud Shell ตั้งค่าไว้เพื่อวัตถุประสงค์นี้เท่านั้น ผลที่ได้จะเหมือนกับการที่คุณเรียกใช้ในเครื่อง
ลองใช้เลย ป้อน 25 แล้วกดแปลง!
ใช่แล้ว 25 คือ XXV ในเลขโรมัน! คุณต้องดำเนินการให้เสร็จสิ้นที่นี่
ลองดูตัวเลขอีกสัก 2-3 ตัว 25 ได้คะแนนแล้ว แล้ว 24 คนล่ะ
บางทีเราอาจต้องรีบเร่งไปหน่อย เราคิดว่าทุกอย่างเรียบร้อยดี XXIIII เป็นการแปลงรหัส 24 ที่ถูกต้องไหม ไม่ควรเป็น XXIV ใช่หรือไม่
กรณีที่ XXIIII คิดถูกต้อง แต่นี่ไม่ใช่สิ่งที่ผู้คนคาดหวังอยู่แล้ว แต่เนื่องจากจริงๆ แล้วไม่ได้ผิด (โปรดทราบว่านาฬิกาหลายเรือนแสดงเลข 4 เป็นเลขโรมัน IIII) จึงปล่อยปัญหานั้นไว้เพื่อการปรับปรุงในอนาคต
ลองใช้จำนวนลบดูไหม ศูนย์ใช่ไหม ไม่มีวิธีแสดงตัวเลขเหล่านั้นเป็นเลขโรมัน ดูเหมือนว่าจะไม่มีข้อความตอบกลับผู้ใช้ ซึ่งดูเหมือนเป็นข้อผิดพลาดที่ต้องได้รับการแก้ไข
การทดสอบสามารถช่วยค้นหาและขจัดข้อผิดพลาด และ Gemini Code Assist สามารถช่วยเราเขียนและใช้การทดสอบได้
5. การเพิ่มการทดสอบ
กลับไปที่หน้าต่าง Gemini Chat แล้วถาม
How can I test the number_to_roman function?
อ่านการตอบกลับ ซึ่งรวมถึงการพูดคุยโมดูล unittest และโมดูล pytest
คุณอาจต้องการให้ Gemini Code Assist เขียนการทดสอบเหล่านี้ให้คุณจริงๆ เปิด calendar.py ซึ่งมีโค้ด Conversion จริงในเครื่องมือแก้ไข กลับไปที่หน้าต่าง Gemini Chat แล้วถามอีกครั้ง
How can I test the number_to_roman function?
ในตอนนี้ การตอบกลับก็มีความเจาะจงมากขึ้น รวมถึงการรวมโมดูล unittest ที่คุณสามารถคัดลอกหรือแทรกลงในไฟล์ใหม่ได้
import unittest
import calendar
class NumberToRomanTest(unittest.TestCase):
def test_convert_1(self):
self.assertEqual(calendar.number_to_roman(1), "I")
def test_convert_4(self):
self.assertEqual(calendar.number_to_roman(4), "IV")
def test_convert_9(self):
self.assertEqual(calendar.number_to_roman(9), "IX")
def test_convert_40(self):
self.assertEqual(calendar.number_to_roman(40), "XL")
def test_convert_90(self):
self.assertEqual(calendar.number_to_roman(90), "XC")
def test_convert_400(self):
self.assertEqual(calendar.number_to_roman(400), "CD")
def test_convert_900(self):
self.assertEqual(calendar.number_to_roman(900), "CM")
def test_convert_1990(self):
self.assertEqual(calendar.number_to_roman(1990), "MCMXC")
def test_convert_2023(self):
self.assertEqual(calendar.number_to_roman(2023), "MMXXIII")
คุณอาจเห็นโค้ดที่ต่างจากตัวอย่างด้านบน โมเดลพื้นฐานของ Gemini Code Assist จะอัปเดตเป็นครั้งคราว ดังนั้นคำตอบที่ได้จึงไม่เหมือนกันเสมอไป หากเห็นโค้ดชุดอื่น ก็เลือกได้ว่าจะดำเนินการต่อโดยใช้ตัวอย่างที่แสดงใน Codelab นี้ต่อไปโดยการคัดลอกโค้ดที่แสดงที่นี่ หรือจะลองใช้คำตอบอื่นที่ Gemini Code Assist ให้ในตอนนี้ก็ได้ และหากมีเวลา คุณจะลองใช้ทั้ง 2 เส้นทางก็ได้ Gemini Code Assist เป็นผู้ช่วยเขียนโค้ดเพื่อให้คุณใช้งานได้ตามความเหมาะสม
คลิกลูกศรสองหัวที่มุมขวาบนของหน้าต่าง Gemini Chat เพื่อสร้างไฟล์ใหม่ที่มีโค้ดการทดสอบ 1 หน่วย หรือใช้ IDE เพื่อสร้างไฟล์ใหม่และวางโค้ดที่แสดงในห้องทดลองนี้ กด Ctrl-S หรือ CMD-S ในหน้าต่างนั้นเพื่อบันทึก และเรียกไฟล์ที่บันทึกไว้ calendar-unittest.py
กลับไปที่เทอร์มินัลแล้วกด Ctrl-C เพื่อหยุดเว็บเซิร์ฟเวอร์ที่คุณเลือกไว้ก่อนหน้านี้ และรับข้อความแจ้งของ Shell ป้อนคำสั่ง
python3 calendar-unittest.py
เพื่อทำการทดสอบใหม่
ไม่มีเอาต์พุต ซึ่งไม่เป็นไปตามที่คาดไว้ ทุกอย่างผ่านไปอย่างเงียบๆ ใช่ไหม คุณต้องการทราบเรื่องนี้อย่างแน่นอน ย้อนกลับไปดูคำตอบจาก Gemini Code Assist ที่รวมโค้ดทดสอบไว้ ด้านล่างโค้ดมีข้อมูลเพิ่มเติมเกี่ยวกับวิธีเรียกใช้กรอบการทดสอบ ดังนี้
ลองเรียกใช้คำสั่งที่แนะนำดังนี้
python -m unittest discover
คุณอาจพบปัญหาหากเครื่องไม่ได้ใช้นามแฝงของคำสั่ง python3
เป็น python
ซึ่งในกรณีนี้จะทำงานดังนี้
python3 -m unittest discover
คำสั่งทำงาน แต่แสดงผล Ran 0 tests in 0.000s
โมดูลนี้มีการทดสอบหลายรายการ บอกว่าคุณกำลังคิดอะไรอยู่
นั่นคือคำสุดท้ายในคำสั่ง discover
ชื่อนั้นมาจากไหน เห็นได้ชัดว่า Gemini Code Assist คาดหวังให้บันทึกโค้ดการทดสอบในไฟล์ชื่อ discover
หรือ discover.py
แต่ไม่ได้ระบุสิ่งที่คุณต้องทำ เนื่องจากคุณบันทึกไฟล์ใน calendar-unittest.py
จริงๆ ให้ลองเรียกใช้คำสั่ง:
python3 -m unittest calendar-unittest
ตอนนี้คุณจะเห็นเอาต์พุตจำนวนมาก เริ่มจากแบบนี้
$ python3 -m unittest calendar-unittest
.F.FFFFFF
======================================================================
FAIL: test_convert_1990 (calendar-unittest.NumberToRomanTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/charles_engelke/testing-with-duet-ai-codelab/calendar-unittest.py", line 28, in test_convert_1990
self.assertEqual(calendar.number_to_roman(1990), "MCMXC")
AssertionError: 'MDCCCCLXXXX' != 'MCMXC'
- MDCCCCLXXXX
+ MCMXC
บรรทัดแรกแสดงระยะเวลาสำหรับการทดสอบที่ผ่านแต่ละครั้ง และ F
สำหรับรายการที่ไม่ผ่านแต่ละครั้ง การทดสอบส่วนใหญ่ล้มเหลว! จากนั้นจะแสดงรายการการทดสอบที่ไม่สำเร็จแยกเป็นรายๆ โดยจะแสดงผลลัพธ์ที่คาดหวังและผลลัพธ์จริง ยังไม่ชัดเจนอยู่สักหน่อยว่าการทดสอบเหล่านี้เรียงลำดับอย่างไร โดยจะเรียงตามลำดับตัวอักษรตามชื่อการทดสอบ ไม่ใช่ลำดับที่การทดสอบปรากฏในไฟล์ ดังนั้น test_convert_1
จึงทำงานก่อน ตามด้วย test_convert_1990
แล้ว test_convert_2023
เป็นเช่นนี้ต่อไปเรื่อยๆ กรอบการทดสอบสำหรับ 1
และ 2023
เป็นเพียงกรณีเดียวที่ผ่าน
เมื่อลองใช้โค้ดนี้เป็นครั้งแรก คุณสังเกตเห็นว่าได้แปลง 24
เป็น XXIIII
ซึ่งไม่ใช่รูปแบบที่ผิดทั่วไป แต่ไม่ใช่แบบฟอร์มทั่วไปที่ IIII
แปลงเป็น IV
การทดสอบที่ไม่สำเร็จทั้งหมดเป็นการทดสอบสำหรับกรณีที่คล้ายกัน ตอนที่ตรวจพบปัญหานี้เป็นครั้งแรก ทาง Lab บอกว่า "แต่จริงๆ แล้วมันก็ไม่ได้ผิดอยู่ดี (โปรดทราบว่านาฬิกาหลายเรือนแสดง 4
เป็นเลขโรมัน IIII
) จึงปล่อยปัญหานี้ไว้เพื่อการปรับปรุงในอนาคต"
คุณสามารถเปลี่ยนกรอบการทดสอบที่คาดหวังและยอมรับว่า "ไม่ได้ผิด" ตอบคำถามเกี่ยวกับโค้ดที่คุณได้รับ หรือยอมรับว่าได้เวลาแล้วสำหรับ "การเพิ่มประสิทธิภาพในอนาคต" ดังนั้นขั้นตอนถัดไปก็คือการแก้ไขโค้ดโดยใช้ความช่วยเหลือจาก Gemini Code Assist เพื่อให้ได้คำตอบที่ยอมรับได้มากขึ้นตามที่การทดสอบคาดหวังไว้
6. กำลังเพิ่มประสิทธิภาพโค้ด
จำได้ว่าคำตอบอย่างเช่น XXIIII
สำหรับ 24
แทนที่จะเป็น XXIV
ทั่วไป ถือว่า "ไม่ผิด" และถูกหยุดสำหรับการปรับปรุงในอนาคต อนาคตนั้นมาถึงแล้ว พวกนั้น "ไม่ผิด" คำตอบยังคงน่ารำคาญอยู่
กฎข้อแรกสำหรับตัวเลขที่ซ้ำในเลขโรมันคือ เมื่อใดก็ตามที่คุณมีตัวเลขสี่หลักที่เหมือนกันเรียงต่อกัน ควรแทนที่ด้วยตัวเลขหนึ่งตามด้วยตัวเลขที่สูงกว่าตัวเลขถัดไป ดังนั้นควรแทนที่ XXIIII
ด้วย XXIV
ในทำนองเดียวกัน XXXX
ควรเปลี่ยนเป็น XL
และ CCCC
ควรเปลี่ยนเป็น CD
ถาม Gemini Code Assist วิธีเปลี่ยนค่าของตัวแปร roman ด้วยวิธีนี้ก่อนที่หมายเลข_to_roman จะแสดงผลโดย number_to_roman
If the final value of roman has IIII in it, that should be replaced by IV. Similarly XXXX should be replaced by XL, and CCCC should become CD. How can I make those changes?
ขอแนะนำให้เพิ่มโค้ดบางส่วนในตอนท้าย
คัดลอก/วาง หรือพิมพ์บรรทัดเหล่านั้นในเครื่องมือแก้ไข จากนั้นดูว่าเกิดอะไรขึ้น
Gemini Code Assist ได้เพิ่มบรรทัดเพื่อจัดการกับกรณีต่างๆ ที่คุณจะได้รับหลังจากทำการแทนที่ชุดแรก เช่น 19 จะถูกแปลงเป็น XVIIII จากนั้นเป็น XVIV และสุดท้ายเป็น XIX ที่ถูกต้อง
หาก Gemini Code Assist ให้คำแนะนำที่เป็นประโยชน์อย่างเห็นได้ชัด ให้กด Tab เพื่อยอมรับคำแนะนำ บันทึกไฟล์ และเรียกใช้เว็บเซิร์ฟเวอร์อีกครั้ง มิฉะนั้น ให้เพิ่มบรรทัดที่แสดงในตัวอย่างที่นี่ด้วยตนเอง แล้วบันทึกไฟล์ ลอง Conversion ที่ยากลำบาก: 1999:
ถูกต้อง
ทำการทดสอบอีกครั้งเลย ผ่านการทดสอบทั้งหมด!
ดูเหมือนว่าเว็บแอปพลิเคชันจะพร้อมสำหรับการใช้งานจริงแล้ว
7. ทำให้ใช้งานได้กับ Cloud Run
Cloud Run จะเรียกใช้แอปพลิเคชันที่สร้างโดยใช้คอนเทนเนอร์บนอินเทอร์เน็ตให้คุณ สำหรับแอปพลิเคชันที่เขียนโดยใช้เฟรมเวิร์กทั่วไป เช่น Flash คำสั่ง gcloud run deploy
จะสร้างคอนเทนเนอร์นั้นให้คุณก่อนใช้งานด้วย เรียกใช้คำสั่งต่อไปนี้
gcloud run deploy
เครื่องอ่านบัตร เมื่อระบบขอตำแหน่งของซอร์สโค้ด ให้กด Enter เพื่อยอมรับตำแหน่งที่ถูกต้องตามที่แนะนำ ในทำนองเดียวกัน เมื่อมีการขอชื่อบริการ ให้กด Enter เพื่อยอมรับคำแนะนำ
คำสั่งอาจล้มเหลวเนื่องจาก gcloud ระบุโปรเจ็กต์ที่จะใช้ไม่ได้ ในกรณีดังกล่าว ให้เรียกใช้คำสั่งต่อไปนี้
gcloud config set core/project <project-id>
โดยแทนที่
ด้วยรหัสโปรเจ็กต์ ซึ่งอาจเป็นชื่อเดียวกับชื่อโปรเจ็กต์ จากนั้นเรียกใช้คำสั่ง gcloud run deploy
อีกครั้ง
- คำสั่งจะแจ้งให้คุณทราบว่าจำเป็นต้องมีและยังไม่ได้เปิดใช้ API บางรายการ ป้อน y เพื่อเปิดใช้ให้คุณ
- เมื่อระบบขอให้เลือกภูมิภาค ให้เลือกภูมิภาคที่สะดวกสำหรับคุณ การป้อนหมายเลขที่เกี่ยวข้องกับ
us-central1
เป็นทางเลือกที่ปลอดภัย - เมื่อระบบถาม ให้ป้อน Y เพื่อดำเนินการต่อ
- คุณจะต้องอนุญาตการเรียกใช้บริการ Cloud Run นี้ที่ไม่ได้ตรวจสอบสิทธิ์ ตัวเลือกการตรวจสอบสิทธิ์ที่ Cloud Run ใช้นั้นเหมาะสำหรับการใช้งานโดยโปรแกรมที่เรียกใช้บริการ เนื่องจากนี้เป็นเว็บไซต์ คุณจะไม่ใช้การตรวจสอบสิทธิ์
Google Cloud จะสร้างคอนเทนเนอร์ ทำให้ใช้งานได้ กำหนดเส้นทางการรับส่งข้อมูลไปยังคอนเทนเนอร์ จากนั้นกำหนดนโยบายการเข้าถึง จากนั้นจะแสดงลิงก์ไปยังหน้าแรก
คุณไปที่ลิงก์นั้นแล้วเข้าถึงแอปพลิเคชันได้
ป้อนตัวเลขแล้วกด Enter แล้วก็ tada!
อะไร!?!
วิธีนี้ใช้ได้ผลในเครื่องของคุณ! ทำไมถึงยังไม่จบ
ดูข้อมูล ถาม Gemini Code Assist
Why am I getting an internal server error on cloud run?
เห็นได้ชัดว่า Gemini Code Assist สามารถอ่านไฟล์บันทึกได้ ซึ่งบอกข้อความที่คล้ายคลึงกัน มาถาม Gemini Code Assist กันว่าคุณจะดูบันทึกด้วยตัวเองได้อย่างไร
ในกรณีดังกล่าวให้ดำเนินการสร้างคีย์ตามที่ระบบแจ้ง มองหาเส้นที่มี !! สีแดง สัญญาณแสดงข้อผิดพลาดด้านล่างนี้
ตามด้วยรายละเอียดหลายบรรทัดในสแต็กการเรียกใช้ที่มาที่นี่ แต่หลังจากนั้นก็มีดังนี้
เมื่อคุณดูไฟล์ calendar.py คุณจะเห็นฟังก์ชัน number_to_roman อยู่ตรงนั้น และที่รู้ก็คือ นี่เป็นสิ่งที่ใช่ เพราะมันทำงานกับเครื่องของคุณ มีอะไรแตกต่างออกไปใน Cloud Run
คำตอบนั้นยาก มีโมดูลมาตรฐานที่รวมอยู่ใน Python3 ที่เรียกว่า calendar เช่นเดียวกับไฟล์ calendar.py ที่มีการกำหนดฟังก์ชัน number_to_roman ในเครื่องของคุณ เมื่อ Python ค้นหาโมดูลที่ชื่อปฏิทิน ระบบจะค้นหาไดเรกทอรีของแอปพลิเคชันก่อน เห็นได้ชัดว่า Python บน Cloud Run ค้นหาโมดูลมาตรฐานก่อน จากนั้นจึงนำเข้า แต่ไม่พบฟังก์ชัน number_to_roman
ความแตกต่างประเภทนี้ในสภาพแวดล้อมต่างๆ นั้นเกิดขึ้นได้เสมอ อย่างไรก็ดี เมื่อแอปพลิเคชันมีคอนเทนเนอร์ ระบบจะรวมสภาพแวดล้อมไว้ภายในด้วย ดังนั้นไม่ว่าจะเรียกใช้ที่ไหน คุณก็คาดหวังลักษณะการทำงานเดียวกันนี้ได้ ถ้าเคยเรียกใช้แอปพลิเคชันที่สร้างโดยใช้คอนเทนเนอร์เดียวกันในเครื่องที่ Cloud Run มี คุณก็อาจพบปัญหาเดียวกัน
แก้ไขปัญหานี้ คุณต้องเปลี่ยนชื่อโมดูลปฏิทินในเครื่องเป็นชื่อที่ไม่ใช่ชื่อโมดูลมาตรฐานด้วย เปลี่ยนชื่อไฟล์ calendar.py เป็น my_calendar.py จากนั้นเปลี่ยนบรรทัด import calendar
ใน main.py และ calendar-unittest.py เป็น import my_calendar
สุดท้าย เปลี่ยนบรรทัด
roman = calendar.number_to_roman(number)
ถึง
roman = my_calendar.number_to_roman(number)
ลองใช้ในเครื่อง ทำการทดสอบ แล้วติดตั้งใช้งานอีกครั้ง ดังนี้
gcloud run deploy
และตอนนี้ใช้งานได้แล้ว
คุณสามารถแชร์ URL นี้ และทุกคนที่ต้องการเครื่องมือแปลงเลขโรมันก็สามารถใช้ URL ของคุณได้
8. ไม่บังคับ: ทำให้ดูดีขึ้น
แอปพลิเคชันของคุณทำงานได้ดีและทุกคนบนเว็บเข้าถึงได้ แต่ภาพจะธรรมดาๆ เล็กน้อย ก่อนที่จะบอกทุกคนเกี่ยวกับเรื่องนี้ ทำไมไม่ลองขอให้ Gemini Code Assist ปรับปรุงหน้าตาดูล่ะ
เปิดไฟล์ templates/index.html
ในหน้าต่างแชทของ Gemini ให้ถามคำถามต่อไปนี้
Make this index.html file use material design.
การตอบกลับคือการเพิ่มไฟล์ปัจจุบันทำให้เกิดผลลัพธ์ที่คล้ายกับข้อความต่อไปนี้
<!DOCTYPE html>
<html>
<head>
<title>Roman Numerals</title>
<link rel="stylesheet" href="https://code.getmdl.io/1.3.0/material.indigo-pink.min.css">
<script defer src="https://code.getmdl.io/1.3.0/material.min.js"></script>
</head>
<body>
<h1 class="mdl-typography--title">Roman Numerals</h1>
<form action="/convert" method="post">
<div class="mdl-textfield mdl-js-textfield">
<input class="mdl-textfield__input" type="text" id="number" name="number" required />
<label class="mdl-textfield__label" for="number">Enter a number:</label>
</div>
<button class="mdl-button mdl-js-button mdl-button--raised mdl-button--colored">
Convert!
</button>
</form>
</body>
</html>
ใช้ไอคอนเพื่อคัดลอกโค้ดที่แนะนำและวางไว้เหนือเนื้อหาที่มีอยู่ของ index.html จากนั้นเรียกใช้ python3 main.py
แล้วคลิกลิงก์เพื่อเปิดหน้าต่างแสดงตัวอย่าง ตอนนี้หน้าเว็บจะดูธรรมดาน้อยลงเล็กน้อย
คุณสามารถทำขั้นตอนนี้ซ้ำได้ด้วยไฟล์ convert.html หากต้องการ
Gemini Code Assist มีความรู้เรื่อง CSS ค่อนข้างมาก และคุณสามารถให้ CSS ช่วยจัดรูปแบบหน้าแอปพลิเคชันได้หลายวิธี นี่เป็นเพียงการเริ่มต้น
หากคุณต้องการแชร์แอปพลิเคชันนี้ อย่าลืมทำให้แอปพลิเคชันใช้งานได้ใน Cloud Run อีกครั้ง:
gcloud run deploy
คุณสามารถส่ง URL ไปให้ผู้ที่ต้องแปลงเป็นตัวเลขโรมัน
9. ยินดีด้วย
ยินดีด้วย คุณทำงานกับ Gemini Code Assist สำเร็จแล้วเพื่อเพิ่มการทดสอบลงในแอปพลิเคชัน แก้ไขข้อผิดพลาด และเพิ่มฟังก์ชันที่ปรับปรุงใหม่
เมื่อใช้แอปพลิเคชันที่สร้างเสร็จแล้ว คุณจะลบแอปออกจากแดชบอร์ด Cloud Console เพื่อหยุดการเรียกเก็บเงินที่อาจเกิดขึ้นในอนาคตได้