Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

เชี่ยวชาญตัวแปรสภาพแวดล้อมใน Ruby: คู่มือปฏิบัติจริง

ตัวแปรสภาพแวดล้อม (environment variable) เป็นคู่คีย์/ค่า (key/value pair) มันมีลักษณะแบบนี้:

KEY=VALUE

เราใช้ตัวแปรเหล่านี้เพื่อแชร์ตัวเลือกการกำหนดค่าระหว่างโปรแกรมทั้งหมดในคอมพิวเตอร์ของคุณ

นั่นคือเหตุผลที่สำคัญที่จะต้องเรียนรู้ว่ามันทำงานอย่างไร และวิธีเข้าถึงจากโปรแกรม Ruby ของคุณโดยใช้ตัวแปรพิเศษ ENV

ตัวอย่างตัวแปรสภาพแวดล้อม:

  • กำหนดค่าเอนิทเตอร์เริ่มต้น (default editor)
  • บอก Ruby ว่าจะหา gems ที่ไหน (GEM_PATH / GEM_HOME)
  • ส่ง API keys เข้าแอปพลิเคชัน โดยไม่ต้องคอมมิตลง source control (git)
  • กำหนดว่าระบบปฏิบัติการควรหาไฟล์ไบนารี (.exe ใน Windows) ที่ไหน
  • ทำให้ Rails เริ่มในโหมด test/development/production

คุณสามารถหารายการตัวแปรสภาพแวดล้อมทั้งหมดได้ด้วยคำสั่ง env ใน Linux/Mac และคำสั่ง set ใน Windows

ตัวอย่าง:

PWD=/home/jesus
SHELL=/usr/bin/zsh
RUBY_ENGINE=ruby
RUBY_VERSION=2.6.0
GEM_ROOT=/opt/rubies/ruby-2.6.0/lib/ruby/gems/2.6.0
# ...

รายการอาจยาวมาก แตคุณไม่ต้องจดจำ

คุณยังสามารถพิมพ์ตัวแปรและการกำหนดค่าเฉพาะ gem ทั้งหมดได้ด้วยคำสั่ง gem env

ตอนนี้:

หากคุณต้องการเข้าถึงตัวแปรสภาพแวดล้อมเหล่านี้จาก Ruby มีออบเจ็กต์พิเศษที่คุณสามารถใช้ได้

มาค้นพบว่ามันทำงานอย่างไร!

การใช้ตัวแปรสภาพแวดล้อมใน Ruby

Ruby มีออบเจ็กต์ ENV นี้ที่ทำงานเหมือนแฮช (hash) และให้คุณเข้าถึงตัวแปรสภาพแวดล้อมทั้งหมดที่พร้อมใช้งาน

นี่คือตัวอย่างบางส่วน...

คุณสามารถหาได้ว่ามีคีย์กี่ตัว:

ENV.size # 48

รับรายการของพวกมัน:

ENV.keys

และเข้าถึงคีย์เฉพาะ:

ENV["GEM_HOME"] # "/home/jesus/.gem/ruby/2.6.0"

คุณแม้แต่สามารถใช้เมธอดเช่น map และ select ได้:

ENV.select { |k,v| k.size < 4 }

แตคุณตั้งค่าตัวแปรสภาพแวดล้อมเหล่านี้ภายนอก Ruby อย่างไร?

วิธีตั้งค่าตัวแปรสภาพแวดล้อม

คุณสามารถตั้งค่าตัวแปรสภาพแวดล้อมสำหรับการใช้งานครั้งเดียว

แบบนี้:

API_KEY=1 ruby -e 'p ENV["API_KEY"]'

ใช้สิ่งนี้ในเทอร์มินัล นอกเหนือจาก irb แล้ว Ruby จะเข้าถึงค่า API_KEY นี้ได้

สิ่งนี้ช่วยได้สำหรับ API keys แตก็สำหรับตั้งค่าโหมด Rails

ตัวอย่าง:

RAILS_ENV=production rails console

จำไว้:

สิ่งนี้ตั้งค่าตัวแปรสภาพแวดล้อมเฉพาะนี้สำหรับกระบวนการ (process) ที่คุณกำลังเปิดอยู่ตอนนี้

หมายความว่าหากฉันทำ API_KEY=1 <command>...

มันจะทำงานเฉพาะคำสั่งนั้นเท่านั้น!

หากคุณต้องการให้ตัวแปรนี้ถูกใช้โดยคำสั่งอื่นๆ ทั้งหมดที่คุณเปิดจากเซสชันเทอร์มินัลปัจจุบัน

ทำแบบนี้:

export API_KEY=1

ตอนนี้ หากคุณทำ:

ruby -e 'p ENV["API_KEY"]'

คุณจะได้ 1 แม้โดยไม่มีตัวแปรนำหน้า

คำเตือน:

อย่าใช้ ENV สำหรับการกำหนดค่าภายในแอปพลิเคชัน Ruby ของคุณ นั่น ไม่ใช่ วัตถุประสงค์ของมัน ENV ใช้สำหรับอ่านการกำหนดค่าภายนอกที่มาจากนอก Ruby เท่านั้น

ลองใช้ gem เช่น dry-configurable สำหรับตัวเลือกการกำหนดค่าภายใน

แอตทริบิวต์สำคัญของตัวแปรสภาพแวดล้อม

คุณอาจพบแอตทริบิวต์เหล่านี้มีประโยชน์ เพราะมันอธิบายพฤติกรรม (ที่อาจไม่คาดคิด)

  • Snapshotting ตัวแปรสภาพแวดล้อมถูกตั้งค่าเมื่อคุณเปิดโปรแกรม และไม่ได้รับผลกระทบจากการเปลี่ยนแปลงภายนอก
  • Closed environment การเปลี่ยนแปลงตัวแปรภายในกระบวนการ (โปรแกรม Ruby ของคุณคือกระบวนการ) ไม่เปลี่ยนตัวแปรสภาพแวดล้อมภายนอกกระบวนการ
  • ตัวแปรสภาพแวดล้อมไม่ถาวร เมื่อคุณรีบูทคอมพิวเตอร์ หรือแม้แต่ปิดเทอร์มินัล การเปลี่ยนแปลงตัวแปรสภาพแวดล้อมจะหายไป (แม้คุณจะใช้ export Linux + Mac / set ใน Windows)

จดจำสิ่งเหล่านี้ไว้!

Rails Credentials

Rails 5.2 นำเสนอระบบใหม่เพื่อช่วยคุณจัดการ API keys

มันทำงานโดยบันทึก credentials โดยตรงไปที่ config/credentials.yml.enc นี่คือไฟล์ที่เข้ารหัสแล้ว ที่คุณสามารถอ่านได้ก็ต่อเมื่อคุณมีไฟล์ master.key

แนวคิดคือ คุณคอมมิตแค่ credentials.yml.enc และเก็บ key ไว้เป็นส่วนตัว

คุณเพิ่ม credentials ใหม่อย่างไร?

จริงๆ แล้วคุณไม่สามารถแก้ไขไฟล์ .enc โดยตรงได้

ใช้คำสั่งนี้แทน:

bin/rails credentials:edit

นี่คือไฟล์ YAML ตรวจสอบให้แน่ใจว่าจัดรูปแบบถูกต้อง

ตอนนี้:

คุณสามารถอ่าน credentials จากแอป Rails ของคุณได้แบบนี้...

Rails.application.credentials.github_api_key

ดูวิดีโอสอน

สรุป

คุณได้เรียนรู้เกี่ยวกับตัวแปรสภาพแวดล้อม เครื่องมือที่มีประโยชน์ที่ช่วยให้คุณจัดการการกำหนดค่าระบบปฏิบัติการ และเก็บ API keys ให้เป็นส่วนตัว

เชี่ยวชาญตัวแปรสภาพแวดล้อมใน Ruby: คู่มือปฏิบัติจริง

โปรดแชร์บทความนี้กับเพื่อนๆ ของคุณ เพื่อให้คนมากขึ้นหาเจอได้ 🙂

ขอบคุณที่อ่านครับ!