Bagaimana cara mengetahui apakah rel sedang dalam produksi?

86

Saya biasa script/server -e productionmemulai rel dalam mode produksi. Itu berhasil dan saya tidak mendapat kesalahan. Namun, bagaimana cara mengetahui apakah itu dalam mode produksi? Saya mencoba rute yang tidak ada, dan saya mendapat halaman kesalahan serupa yang saya lakukan dalam pengembangan.

Saya pikir jika dalam model produksi, saya mendapatkan halaman kesalahan 404 yang ada di folder saya / publik.

Apakah itu berarti itu tidak dimulai dalam mode produksi?

Terima kasih atas bantuan Anda.

sent-hil
sumber

Jawaban:

35

2 cara mudah:

tail -f log/production.log

jika ada entri yang mengisi log itu setelah Anda membuka aplikasi, Anda dalam mode produksi.

cara kedua:

di salah satu tampilan Anda (mungkin tata letaknya bagus), tambahkan saja

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

Dan itu akan menunjukkan kepada Anda lingkungan tempat Anda berlari.

edit

Anda akan melihat halaman pengecualian default dan bukan halaman kesalahan sebenarnya di lingkungan mana pun jika permintaan dianggap "lokal" (yaitu dari localhost atau 127.0.0.1), Anda dapat menggantinya dengan menambahkan ini ke ApplicationController

def local_request?
  false
end

Anda dapat menemukan metode ini di dokumen di api

Dan McNevin
sumber
Saya tidak bisa mendapatkan cara kedua untuk bekerja, tetapi ada entri di production.log saya yang mengatakan saya membuat Tugas pada waktu X. Jadi mengapa saya tidak mendapatkan halaman kesalahan 404 yang benar? Apakah saya harus menentukan tempat untuk memberikan halaman kesalahan yang benar? Terima kasih untuk bantuannya.
dikirim-hil
Saya mendapat kesalahan dalam pandangan saya dan harus menggunakan pendekatan @ Krishnaprasad sebagai gantinya.
Besi
5
Harap dicatat RAILS_ENVsudah usang. Gunakan Rails.envsebagai gantinya.
Soullivaneuh
238

Jika Rails 3.1+ nya, Rails.env.production?akan kembali truesaat di produksi.

Rails.env.production?  #=> true  
Rails.env.staging?     #=> false
Rails.env.development? #=> false  
Krishnaprasad Varma
sumber
2
>> Rails.envvia rails cmuncul untuk menampilkan mode apapun.
originalhat
6
Rails.env.development?juga tersedia.
hlcs
Semuanya dengan tanda tanya tersedia. Rails.envadalah String yang didekorasi dengan ActiveSupport::StringInquirer. api.rubyonrails.org/classes/ActiveSupport/StringInquirer.html
Sebastian vom Meer
Sekadar catatan, ini juga berfungsi di konsol rel. Pada server produksi saya dapat menjalankan: rails console, lalu perintah di atas.
Ryan
28

Untuk versi Rails modern (3+), Rails.envkembalikan lingkungan sebagai String:

Rails.env #=> "production"

Ada juga pengakses berguna untuk setiap lingkungan yang akan mengembalikan Boolean:

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

Pada jenis baris perintah Anda rails console, lalu Rails.env.

Karolis Ramanauskas
sumber
3

Saya merasa jauh lebih mudah untuk memulai ulang server rel dan membaca baris kedua pada baris perintah:

Menjalankan rails s -e productionkeluaran:

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

Memiliki Webrick dalam contoh tetapi beberapa orang tidak mengerti bagaimana mengubah server hanya akan menggantikan namanya. Diperbarui untuk kejelasan.

bkunzi01.dll
sumber
8
Tidak ada orang waras yang menggunakannya WEBrickdalam produksi.
Hauleth
Hauleth benar sekali. Ini hanya untuk menguji lingkungan apa yang sedang Anda kembangkan.
bkunzi01
Jika jawaban ini menipu, itu penguasaan! Selamat!
JD.
-2

alternatif baris perintah

$ echo $ RAILS_ENV

vireshas
sumber
Ini tidak akan berfungsi jika server dimulai dengan var ENV inline. Meskipun demikian, jika ini dilakukan maka skrip / alias / etc harus berada di suatu tempat di disk, yang akan menyertakan var RAILS_ENV. Seseorang dapat mencari disk untuk itu, seperti denganack
New Alexandria
ini tidak bekerja .... apa yang ada dalam variabel dan bagaimana mendapatkan lingkungan ???
z atef