จะทราบได้อย่างไรว่ารางอยู่ในระหว่างการผลิต?


86

ฉันเคยscript/server -e productionเริ่มรางในโหมดการผลิต มันทำและฉันไม่มีข้อผิดพลาด อย่างไรก็ตามฉันจะทราบได้อย่างไรว่าอยู่ในโหมดการผลิต ฉันลองใช้เส้นทางที่ไม่มีอยู่จริงและฉันได้รับหน้าแสดงข้อผิดพลาดที่คล้ายกันที่ฉันทำในการพัฒนา

ฉันคิดว่าหากอยู่ในรูปแบบการผลิตฉันจะได้รับหน้าข้อผิดพลาด 404 ที่อยู่ในโฟลเดอร์ / สาธารณะของฉัน

หมายความว่ามันไม่ได้เริ่มในโหมดการผลิตหรือไม่?

ขอบคุณสำหรับความช่วยเหลือของคุณ.

คำตอบ:


35

2 วิธีง่ายๆ:

tail -f log/production.log

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

วิธีที่สอง:

ในมุมมองของคุณ (อาจเป็นรูปแบบที่ดี) เพียงแค่เพิ่ม

<%= "Environment: #{RAILS_ENV}" %>

และนั่นจะแสดงให้คุณเห็นว่าคุณอยู่ในสภาพแวดล้อมแบบไหน

แก้ไข

คุณจะเห็นหน้าข้อยกเว้นเริ่มต้นแทนที่จะเป็นหน้าข้อผิดพลาดจริงในสภาพแวดล้อมใด ๆ หากคำขอนั้นถือว่าเป็น "local" (ซึ่งมาจาก localhost หรือ 127.0.0.1) คุณสามารถแทนที่สิ่งนี้ได้โดยเพิ่มสิ่งนี้ลงใน ApplicationController

def local_request?
  false
end

คุณสามารถค้นหาวิธีนี้ได้ในเอกสารในapi


ฉันไม่สามารถหาวิธีที่สองในการทำงานได้ แต่มีรายการใน production.log ของฉันบอกว่าฉันสร้างงานในเวลา X เหตุใดฉันจึงไม่ได้รับหน้าข้อผิดพลาด 404 ที่ถูกต้อง? ฉันต้องระบุที่ไหนเพื่อให้หน้าแสดงข้อผิดพลาดถูกต้องหรือไม่? ขอบคุณสำหรับความช่วยเหลือ
ส่งแล้ว

ฉันได้รับข้อผิดพลาดในมุมมองของฉันและต้องใช้แนวทางของ @ กฤษ ณ ประศาสน์แทน
Besi

5
โปรดทราบRAILS_ENVว่าเลิกใช้งานแล้ว ใช้Rails.envแทน
Soullivaneuh

238

หาก Rails 3.1+ Rails.env.production?จะกลับมาtrueเมื่ออยู่ในระหว่างการผลิต

Rails.env.production?  #=> true  
Rails.env.staging?     #=> false
Rails.env.development? #=> false  

2
>> Rails.envผ่านrails cปรากฏขึ้นเพื่อแสดงสำหรับโหมดใด ๆ
ต้นฉบับ

6
Rails.env.development?นอกจากนี้ยังมี
hlcs

มีทุกอย่างที่มีเครื่องหมายคำถาม Rails.envเป็นสตริงที่ประดับด้วยActiveSupport::StringInquirer. api.rubyonrails.org/classes/ActiveSupport/StringInquirer.html
Sebastian

เช่นเดียวกับหมายเหตุสิ่งนี้ยังใช้งานได้ในคอนโซลราง บนเซิร์ฟเวอร์ที่ใช้งานจริงฉันสามารถรัน: rail console ตามด้วยคำสั่งด้านบน
Ryan

28

สำหรับเวอร์ชัน Rails ที่ทันสมัย ​​(3+) ให้Rails.envส่งคืนสภาพแวดล้อมเป็นString:

Rails.env #=> "production"

นอกจากนี้ยังมีตัวเข้าถึงที่เป็นประโยชน์สำหรับแต่ละสภาพแวดล้อมซึ่งจะส่งคืน a Boolean:

Rails.env.production?  #=> true  
Rails.env.staging?     #=> false
Rails.env.development? #=> false  


3

ฉันพบว่ามันง่ายกว่ามากที่จะรีสตาร์ทเซิร์ฟเวอร์รางและอ่านบรรทัดที่สองในบรรทัดคำสั่ง:

กำลังรันrails s -e productionเอาต์พุต:

=> Booting Puma
=> Rails 4.2.4 application starting in `production` on http://localhost:3000

มี Webrick ในตัวอย่าง แต่บางคนไม่เข้าใจว่าการเปลี่ยนเซิร์ฟเวอร์จะแทนที่ชื่อได้อย่างไร ปรับปรุงเพื่อความชัดเจน


8
ไม่มีใครใช้เหตุผลWEBrickในการผลิต
Hauleth

Hauleth ถูกต้องอย่างแน่นอน นี่เป็นเพียงการทดสอบว่าคุณอยู่ในสภาพแวดล้อมใดในขณะที่พัฒนา
bkunzi01

ถ้าคำตอบนี้หลอกล่อมันเชี่ยวชาญ! ยินดีด้วย!
JD.

-2

ทางเลือกบรรทัดคำสั่ง

$ echo $ RAILS_ENV


สิ่งนี้จะไม่ทำงานหากเซิร์ฟเวอร์เริ่มต้นด้วยตัวแปร ENV แบบอินไลน์ ที่กล่าวว่าหากเสร็จแล้วสคริปต์ / นามแฝง / ฯลฯ ควรอยู่ที่ใดที่หนึ่งบนดิสก์ซึ่งจะรวมถึง RAILS_ENV var สามารถค้นหาดิสก์ได้เช่นack
New Alexandria

มันใช้ไม่ได้ .... อะไรอยู่ในตัวแปรและรับสภาพแวดล้อมได้อย่างไร ???
z atef
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.