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

วิธีกำหนดค่าแอพ Rails ของคุณเพื่อจัดส่ง

คุณพร้อมที่จะเปิดตัวแอปสำหรับใช้งานจริงครั้งแรกแล้ว และได้เวลาพูดคุยกับบริการภายนอกบางอย่างแล้ว คุณยังต้องทำให้ทุกอย่างเกี่ยวพันกัน แล้ววิธีใดดีที่สุดในการกำหนดค่าบริการของคุณในการผลิตโดยไม่ทำให้สิ่งต่างๆ ซับซ้อนขึ้นในเครื่อง dev ของคุณ

ตั้งค่าสภาพแวดล้อมของคุณ

ในการกำหนดค่าแอปที่ใช้งานจริง แนวทางปฏิบัติที่ดีที่สุดของวันนี้คือการใช้ตัวแปรสภาพแวดล้อม (ENV["REDIS_HOST"] เหล่านั้น -มองสิ่งของ)

แต่ทำไม?

  • การคอมมิตคีย์การผลิตโดยไม่ได้ตั้งใจทำได้ยากกว่า

    หากคุณไม่สนใจ คุณอาจ git push ไฟล์ที่มีคีย์ลับที่สำคัญอยู่ในนั้น และนั่นอาจเป็นความผิดพลาดราคาแพง

  • การกำหนดค่าคือสิ่งที่ตัวแปรสภาพแวดล้อมมีไว้สำหรับ

    ตัวแปรสภาพแวดล้อมเป็นวิธีทั่วไปในการกำหนดค่าแอพในเกือบทุกระบบ โปรแกรมอื่นๆ มากมาย (เช่น Ruby) ใช้ตัวแปรสภาพแวดล้อมสำหรับการกำหนดค่า ดังนั้นจึงควรลองใช้ในแอปของคุณเองเท่านั้น

  • ตัวแปรสภาพแวดล้อมนั้นง่ายต่อการตั้งค่าในการผลิต

    Heroku มีเว็บ UI และเครื่องมือบรรทัดคำสั่งสำหรับการตั้งค่าตัวแปรสภาพแวดล้อมอย่างง่ายดาย และหากคุณกำลังสร้างเซิร์ฟเวอร์ของคุณเอง เครื่องมือการจัดการเซิร์ฟเวอร์ เช่น Chef และ Docker จะทำให้การตั้งค่าตัวแปรสภาพแวดล้อมทำได้ง่าย

ด้านข้าง Rails มีลักษณะอย่างไร

นี่คือวิธีที่แอปที่ขึ้นอยู่กับตัวแปรสภาพแวดล้อมสามารถกำหนดค่าเองได้:

config/my_service.yml
production:
  host: <%= ENV["MY_SERVICE_HOST"] %>
  port: <%= ENV["MY_SERVICE_PORT"] %>
config/initializers/my_service.rb
my_service_config = Rails.application.config_for(:my_service)
    
my_service = MyService.new(my_service_config["host"], my_service_config["port"])

ตัวเริ่มต้นใช้ config_for ของ Rails 4.2 วิธีการหา .yml . ที่ถูกต้อง ไฟล์และเลือกสภาพแวดล้อมที่เหมาะสม

จากนั้น config_for เรียกใช้ ERB รหัสภายใน my_service.yml และคว้า MY_SERVICE_HOST และ MY_SERVICE_PORT ออกจากสิ่งแวดล้อม มันส่งค่าเหล่านั้นไปยัง MyService .

คุณยังสามารถให้ initializer อ่านจาก ENV["MY_SERVICE_HOST"] โดยตรง. แต่ฉันชอบเก็บไว้ใน .yml ไฟล์ด้วยเหตุผลที่คุณจะเห็นในไม่กี่นาที

การกำหนดค่าแอปของคุณอยู่ในระหว่างการพัฒนา

ตัวแปรสภาพแวดล้อมนั้นใช้ได้สำหรับการผลิต แต่เมื่อคุณตั้งค่าคอนฟิกการผลิตแล้ว คุณจะจัดการกับโหมดการพัฒนาและทดสอบอย่างไร

คุณมีตัวเลือกน้อย แต่ฉันมักจะทำตามแบบแผนใน config/secrets.yml . ของ Rails :ใช้ตัวแปรสภาพแวดล้อมในการผลิต และฮาร์ดโค้ดค่าที่ไม่เป็นความลับในการพัฒนาและทดสอบ

ด้วยสภาพแวดล้อมการพัฒนาและทดสอบ config/my_service.yml อาจมีลักษณะดังนี้:

config/my_service.yml
production:
  host: <%= ENV["MY_SERVICE_HOST"] %>
  port: <%= ENV["MY_SERVICE_PORT"] %>
  
development:
  host: localhost
  port: 8081
  
test:
  host: localhost
  port: 8081

เยี่ยมมาก ตัวเริ่มต้นสามารถเหมือนเดิมทุกประการ ค่าในไฟล์นี้จะถูกใช้ในสภาพแวดล้อมการพัฒนาและการทดสอบ และสภาพแวดล้อมการใช้งานจริงจะได้รับค่าจากตัวแปรสภาพแวดล้อม

แต่ทำไมคุณถึงฮาร์ดโค้ดค่าเหล่านี้?

  • ค่าของการกำหนดค่าจะมองเห็นและเปลี่ยนแปลงได้ง่ายขึ้น

    คุณปรับแต่งการกำหนดค่าได้ขณะทดสอบฟีเจอร์ใหม่ ซึ่งเป็นสิ่งที่คุณต้องการในการพัฒนา แต่ไม่มากในเวอร์ชันที่ใช้งานจริง

  • การเริ่มต้นใช้งานใหม่จะง่ายกว่า

    หากตัวอย่างการกำหนดค่าทั้งหมดที่คุณต้องการได้รับการตรวจสอบในที่เก็บ git ของคุณ ผู้พัฒนาใหม่จะต้องโคลนและเรียกใช้แอปของคุณ โดยไม่จำเป็นต้องยุ่งยากกับการตั้งค่าที่เหมาะสมเพื่อให้แอปทำงานได้

  • คุณไม่ต้องกังวลกับตัวแปรสภาพแวดล้อมที่ขัดแย้งกัน

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

ดังนั้น ลองใช้ตัวแปรสภาพแวดล้อมในการผลิต และฮาร์ดโค้ด .yml config ในการพัฒนา ง่าย อ่านได้ และ Rails ก็มีการสนับสนุนในตัวเพื่อจัดการกับไฟล์ปรับแต่งประเภทนั้นๆ

ตัวเลือกอื่นสำหรับการพัฒนา

มีอีกวิธีในการจัดการการกำหนดค่าในโหมดการพัฒนา:dotenv. มันดูเรียบร้อย แต่ฉันยังไม่ได้ลองใช้ในแอปของตัวเอง

ด้วย dotenv คุณสามารถใส่ตัวแปรสภาพแวดล้อมในไฟล์ชื่อ .env ในไดเร็กทอรีรากของแอป Rails ของคุณ และค่าเหล่านั้นจะถูกเลือกโดยแอปของคุณ นี่เป็นสิ่งที่ดีเพราะสภาพแวดล้อมการพัฒนาของคุณทำหน้าที่เหมือนสภาพแวดล้อมการผลิตของคุณมากขึ้น นั่นเป็นวิธีที่ดีในการหลีกเลี่ยงข้อบกพร่องที่จะเกิดขึ้นในการผลิตเท่านั้น

เป็นสิ่งที่ฉันจะพยายามสักวันหนึ่ง แต่ตอนนี้ ยังไม่เจออะไรที่สะดวกไปกว่า .yml และ config_for .

แอพที่ใช้งานจริงส่วนใหญ่ต้องการการกำหนดค่าบางอย่าง ดังนั้น เมื่อคุณทำให้แอปถัดไปใช้งานได้ ให้ลองใช้ .yml ไฟล์ที่เติมโดยตัวแปรสภาพแวดล้อมในการผลิตเพื่อกำหนดค่า คุณจะได้รับความยืดหยุ่น ความเรียบง่าย และความน่าเชื่อถือที่คุณคาดหวัง

คุณมีวิธีอื่นในการกำหนดค่าแอพที่ใช้งานจริงหรือไม่? แสดงความคิดเห็นฉันชอบที่จะได้ยินเกี่ยวกับเรื่องนี้!