ฉันเห็นทั้งสองตัวอย่างเมื่อตรวจสอบสิ่งที่ env หนึ่งทำงานสิ่งที่ต้องการคืออะไร พวกเขาสำหรับทุกเจตนาและวัตถุประสงค์เท่ากันหรือไม่
ฉันเห็นทั้งสองตัวอย่างเมื่อตรวจสอบสิ่งที่ env หนึ่งทำงานสิ่งที่ต้องการคืออะไร พวกเขาสำหรับทุกเจตนาและวัตถุประสงค์เท่ากันหรือไม่
คำตอบ:
อ้างอิงจากเอกสาร , #Rails.env
wraps RAILS_ENV
:
# File vendor/rails/railties/lib/initializer.rb, line 55
def env
@_env ||= ActiveSupport::StringInquirer.new(RAILS_ENV)
end
แต่ดูว่ามันห่อโดยเฉพาะโดยใช้ActiveSupport::StringInquirer
:
การตัดสตริงในคลาสนี้ให้วิธีที่ดีกว่าในการทดสอบความเท่าเทียมกัน ค่าที่ส่งคืนโดย Rails.env ถูกห่อในวัตถุ StringInquirer ดังนั้นแทนที่จะเรียกสิ่งนี้:
Rails.env == "production"
คุณสามารถเรียกสิ่งนี้:
Rails.env.production?
ดังนั้นพวกเขาจึงไม่ได้ว่าเทียบเท่า แต่พวกเขากำลังค่อนข้างใกล้เคียง ฉันไม่ได้ใช้ราง ๆ มาก แต่ผมว่าเป็นที่แน่นอนตัวเลือกที่น่าสนใจมากขึ้นสายตาเนื่องจากการใช้#Rails.env
StringInquirer
Rails.env
เป็นมาตรฐานใหม่ตามที่RAILS_ENV
ถูกคัดค้าน
ENV['RAILS_ENV']
คือตอนนี้เลิกใช้
คุณควรใช้Rails.env
ซึ่งดีกว่ามากอย่างชัดเจน
Before Rails 2.x วิธีที่ต้องการเพื่อให้ได้สภาพแวดล้อมปัจจุบันคือการใช้RAILS_ENV
ค่าคงที่ ในทำนองเดียวกันคุณสามารถใช้RAILS_DEFAULT_LOGGER
เพื่อรับตัวบันทึกปัจจุบันหรือRAILS_ROOT
เพื่อรับเส้นทางไปยังโฟลเดอร์ราก
เริ่มจาก Rails 2.x, Rails แนะนำRails
โมดูลด้วยวิธีพิเศษบางอย่าง:
นี่ไม่ใช่แค่การเปลี่ยนแปลงเครื่องสำอาง โมดูล Rails นำเสนอความสามารถที่ไม่พร้อมใช้งานโดยใช้ค่าคงที่มาตรฐานเช่นStringInquirer
การสนับสนุน นอกจากนี้ยังมีความแตกต่างเล็กน้อย Rails.root
ไม่ได้กลับง่ายString
buth Path
อินสแตนซ์
อย่างไรก็ตามวิธีที่ต้องการคือการใช้Rails
โมดูล ค่าคงที่จะถูกคัดค้านใน Rails 3 และจะถูกลบในการเปิดตัวในอนาคตอาจจะเป็น Rails 3.1
Rails.env
ทำงานได้โดยไม่มีปัญหา
พฤติกรรมแปลก ๆ ขณะตรวจแก้จุดบกพร่องแอพของฉัน: ต้องการ "active_support / การแจ้งเตือน" (rdb: 1) p ENV ['RAILS_ENV'] "ทดสอบ" (rdb: 1) p Rails.env "การพัฒนา"
ฉันจะบอกว่าคุณควรติดกับหนึ่งหรืออื่น (และโดยเฉพาะอย่างยิ่ง Rails.env)
ปรับปรุง: ใน Rails 3.0.9: วิธี env ที่กำหนดไว้ใน railties / lib / rails.rb