Làm thế nào để biết nếu đường ray đang được sản xuất?


86

Tôi đã từng script/server -e productionkhởi động đường ray ở chế độ sản xuất. Nó đã làm và tôi không có lỗi. Tuy nhiên, làm cách nào để biết nó có đang ở chế độ sản xuất hay không? Tôi đã thử một tuyến không tồn tại và tôi gặp phải trang lỗi tương tự mà tôi đã thực hiện trong quá trình phát triển.

Tôi nghĩ nếu theo mô hình sản xuất, tôi nhận được trang lỗi 404 nằm trong thư mục / công khai của tôi.

Nó có nghĩa là nó không bắt đầu ở chế độ sản xuất?

Cảm ơn bạn đã giúp đỡ.

Câu trả lời:


34

2 cách dễ dàng:

tail -f log/production.log

nếu có các mục nhập vào nhật ký đó sau khi bạn truy cập ứng dụng, bạn đang ở chế độ sản xuất.

cách thứ hai:

ở một trong các chế độ xem của bạn (có thể là bố cục tốt), chỉ cần thêm

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

Và điều đó sẽ cho bạn thấy bạn đang sử dụng môi trường nào.

biên tập

Bạn sẽ thấy trang ngoại lệ mặc định thay vì các trang lỗi thực tế trên bất kỳ môi trường nào nếu yêu cầu được coi là "cục bộ" (đó là từ localhost hoặc 127.0.0.1), bạn có thể ghi đè điều này bằng cách thêm nó vào ApplicationController

def local_request?
  false
end

Bạn có thể tìm thấy phương pháp này trong tài liệu trong api


Tôi không thể làm theo cách thứ hai, nhưng có một số mục trong production.log của tôi nói rằng tôi đã tạo một Nhiệm vụ vào lúc X. Vậy tại sao tôi không nhận được đúng trang lỗi 404? Tôi có phải chỉ định một nơi nào đó để cung cấp trang lỗi phù hợp không? Cảm ơn đã giúp đỡ.
sent-hil

Tôi đã gặp lỗi trong chế độ xem của mình và thay vào đó phải sử dụng phương pháp của @ Krishnaprasad.
Besi

5
Xin lưu ý RAILS_ENVlà không được dùng nữa. Sử dụng Rails.envthay thế.
Soullivaneuh

238

Nếu Rails 3.1+ của nó, Rails.env.production?sẽ trở lại truekhi được sản xuất.

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

2
>> Rails.envqua rails cxuất hiện để hiển thị cho bất kỳ chế độ nào.
obfk

6
Rails.env.development?cũng có sẵn.
hlcs

Mọi thứ có dấu hỏi đều có sẵn. Rails.envlà một Chuỗi được trang trí bằng ActiveSupport::StringInquirer. api.rubyonrails.org/classes/ActiveSupport/StringInquirer.html
Sebastian vom Meer

Cũng như một lưu ý, điều này cũng hoạt động trong bảng điều khiển rails. Trên máy chủ sản xuất, tôi có thể chạy: bảng điều khiển rails, sau đó là lệnh ở trên.
Ryan

28

Đối với các phiên bản Rails hiện đại (3+), Rails.envtrả về môi trường dưới dạng String:

Rails.env #=> "production"

Ngoài ra còn có các trình truy cập hữu ích cho mỗi môi trường sẽ trả về Boolean:

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


3

Tôi thấy dễ dàng hơn nhiều khi chỉ khởi động lại máy chủ rails và đọc dòng thứ hai trên dòng lệnh:

rails s -e productionĐầu ra đang chạy :

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

Có Webrick trong ví dụ nhưng một số người không hiểu cách thay đổi máy chủ sẽ thay thế tên. Cập nhật cho rõ ràng.


8
Không có ai lành mạnh đang sử dụng WEBricktrong sản xuất.
Hauleth

Hauleth hoàn toàn chính xác. Điều này chỉ đơn giản là để kiểm tra xem bạn đang ở trong môi trường nào khi đang phát triển.
bkunzi01

Nếu câu trả lời này là trolling thì đó là sự thành thạo! Xin chúc mừng!
JD.

-2

dòng lệnh thay thế

$ echo $ RAILS_ENV


Điều này sẽ không hoạt động nếu máy chủ được khởi động bằng var ENV nội tuyến. Điều đó nói rằng, nếu điều này được thực hiện thì một tập lệnh / bí danh / vv sẽ nằm ở đâu đó trên đĩa, sẽ bao gồm var RAILS_ENV. Người ta có thể tìm kiếm trên đĩa cho nó, chẳng hạn như vớiack
New Alexandria

điều này không hoạt động .... những gì có trong biến và làm thế nào nó nhận được môi trường ???
zee
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.