Ubah aplikasi Rails menjadi produksi

190

Bagaimana saya bisa mengubah aplikasi Rails saya untuk berjalan dalam mode produksi? Apakah ada file config, environment.rb misalnya, untuk melakukan itu?

Adler Medrado
sumber
2
Tampaknya jawaban kedua memiliki lebih banyak suara, apakah Anda bersedia untuk memberikan ulasan singkat ini dan menerima jawaban kedua kecuali Anda memiliki masalah dengannya. Hanya akan membantu pengunjung masa depan. Thx :)
Evolve

Jawaban:

73

Cara mengatur dan menjalankan aplikasi Rails 4 dalam mode Produksi (langkah-demi-langkah) menggunakan Apache dan Penumpang Phusion:

Biasanya Anda bisa memasuki proyek Rails Anda rails s,, dan mendapatkan versi pengembangan aplikasi Anda di http://something.com:3000 . Mode produksi agak sulit untuk dikonfigurasi.

Saya sudah bermain-main dengan ini untuk sementara waktu, jadi saya pikir saya akan menulis ini untuk pemula (seperti saya sendiri). Ada beberapa tweak kecil yang tersebar di internet dan berpikir ini mungkin lebih mudah.

  1. Lihat panduan ini untuk pengaturan inti server (CentOS 6, tetapi harus berlaku untuk hampir semua rasa Linux): https://www.digitalocean.com/community/tutorials/how-to-setup-a-rails-4 -app-dengan-apache-dan-penumpang-pada-centos-6

  2. Pastikan sepenuhnya bahwa setelah Penumpang diatur Anda telah mengedit /etc/httpd/conf/httpd.conffile untuk mencerminkan struktur direktori Anda. Anda ingin mengarahkan DocumentRoot ke proyek Rails Anda / folder publik Di mana saja dalam httpd.conffile yang memiliki dir semacam ini: /var/www/html/your_application/publicperlu diperbarui atau semuanya akan sangat frustasi. Saya tidak bisa cukup menekankan hal ini.

  3. Nyalakan ulang server (atau Apache setidaknya - service httpd restart)

  4. Masukkan folder proyek Rails Anda /var/www/html/your_applicationdan mulai migrasi dengan rake db:migrate. Pastikan bahwa tabel database ada, bahkan jika Anda berencana menambahkan tabel nanti (ini juga merupakan bagian dari langkah 1).

  5. RAILS_ENV=production rake secret- ini akan membuat kunci secret_ yang dapat Anda tambahkan config/secrets.yml. Anda dapat menyalin / menempelkan ini ke config / secrets.yml demi menjalankan sesuatu, meskipun saya sarankan Anda tidak melakukan ini. Secara pribadi, saya melakukan langkah ini untuk memastikan semuanya bekerja, lalu mengubahnya kembali dan sumber nanti.

  6. RAILS_ENV=production rake db:migrate

  7. RAILS_ENV=production rake assets:precompilejika Anda melayani aset statis. Ini akan mendorong js, css, file gambar ke /publicfolder.

  8. RAILS_ENV=production rails s

Pada titik ini aplikasi Anda seharusnya tersedia di http://something.com/whateverbukan :3000. Jika tidak, passenger-memory-statsdan lihat apakah ada entri suka908 469.7 MB 90.9 MB Passenger RackApp: /var/www/html/projectname

Saya mungkin melewatkan sesuatu yang keji, tetapi ini telah berhasil bagi saya di masa lalu.

etusm
sumber
2
Saya merasa jawaban ini harus dimigrasikan ke dokumentasi stackoverflow.
Whitecat
Saya akan menambahkan bahwa jika Anda tidak ingin menggunakan pengiriman konten web seperti apache, Anda dapat menambahkan RAILS_SERVE_STATIC_FILES = 1 di samping RAILS_ENV = produksi, itu berarti bahwa rel akan melayani setiap file sehingga tidak akan merekomendasikan ini untuk keadaan produksi nyata ...
3d0
351

Sekarang ini akan menjadi

rails server -e production

Atau, lebih ringkas

rails s -e production

Ini berfungsi untuk proyek rel 3+.

BandOnABudget
sumber
33
atau versi singkatrails s -e production
Pavel Nikolov
2
Bagaimana dengan layanan cloud seperti Heroku? Bagaimana cara menjalankannya server -e production?
Hijau
Layanan cloud biasanya memiliki opsi untuk menentukan lingkungan, tetapi di dalamnya productionselalu merupakan default.
James Billingham
2
echo "export RAILS_ENV=production" >> ~/.bash_profile
Meekohi
Jawaban yang lebih disukai, yang ini harus ke dokumentasi StackOverflow.
dmanexe
61

Jika Anda menjalankan Penumpang , maka defaultnya adalah berjalan dalam produksi, di apache conf Anda:

<VirtualHost *:80>
  ServerName application_name.rails.local
  DocumentRoot "/Users/rails/application_name/public"
  RailsEnv production ## This is the default
</VirtualHost>

Jika Anda hanya menjalankan server lokal dengan mongrel atau webrick, Anda dapat melakukannya:

./script/server -e production

atau dalam bash:

RAILS_ENV=production ./script/server

sebenarnya mengesampingkan konstanta RAILS_ENV di enviornment.rb mungkin harus menjadi pilihan terakhir Anda, karena mungkin tidak akan tetap ditetapkan (lihat jawaban lain yang saya berikan pada itu)

Dan McNevin
sumber
54

Jika saran mipadi tidak berfungsi, tambahkan ini ke config / environment.rb

# force Rails into production mode when                          
# you don't control web/app server and can't set it the proper way                  
ENV['RAILS_ENV'] ||= 'production'
Pete
sumber
Bagaimana dengan layanan cloud seperti Heroku? Apakah ENV['RAILS_ENV'] ||= 'production'bisa diterapkan pada mereka juga?
Hijau
Saya mengedit file ini sejak lama dan lupa .. terima kasih untuk mengingatkan .. menghemat banyak waktu
Agnes
19

Ubah variabel lingkungan RAILS_ENVmenjadi production.

mipadi
sumber
3
di mana variabel lingkungan berada?
BKSpurgeon
mungkin berlokasi di ~/.bashrcatau ~/.bash_profileatau hanyaexport RAILS_ENV=production"
Shimaa Marzouk
19
$> export RAILS_ENV=production
Berkembang
sumber
18

Anda juga dapat meneruskan lingkungan ke skrip / server:

$ script/server -e production
teman
sumber
12
rails s -e production

Ini akan menjalankan server dengan RAILS_ENV= 'production'.

Selain itu, Anda harus menetapkan jalur aset di production.rb

config.serve_static_assets = true

Tanpa ini, aset Anda tidak akan dimuat.

Prasanna
sumber
Maaf ... ditolak ketika dimaksudkan untuk membatalkan. Edit sedikit untuk memperbaiki kesalahan dan upvote.
tomd
7
RAILS_ENV=production rails s

ATAU

rails s -e production

Secara default lingkungan adalah pengembangan.

puneet18
sumber
5

Seperti yang telah diposting orang lain: rails server -e production

Atau, fave pribadi saya: RAILS_ENV=production rails s

alex1sz
sumber
2

Dalam Rails 3

Menambahkan Rails.env = ActiveSupport::StringInquirer.new('production')ke dalam application.rb dan rails sakan berfungsi sama denganrails server -e production

module BlacklistAdmin
  class Application < Rails::Application

    config.encoding = "utf-8"
    Rails.env = ActiveSupport::StringInquirer.new('production')

    config.filter_parameters += [:password]
  end
end
RSK
sumber
2

Ini bukan cara yang baik untuk menjalankan server rail di lingkungan produksi dengan "rails server -e production", karena kemudian rails berjalan sebagai aplikasi single-threaded, dan hanya dapat menanggapi satu permintaan HTTP pada satu waktu.

Artikel terbaik tentang lingkungan produksi untuk rel adalah Lingkungan Produksi - Rel 3

Evgeny Liskovets
sumber
3
Link rot ... tersedia di mesin
wayback
1

untuk server default: rails s -e production

untuk port server costum: rails s -p [port] -e produksi, mis. rel s -p 3002 -e produksi

pengguna3786185
sumber
1

Secara default server berjalan di lingkungan pengembangan: $ rails s

Jika Anda berjalan di lingkungan produksi: $ rails s -e productionatau$ RAILS_ENV=production rails s

Pankaj Dhote
sumber
0

Pastikan Anda telah melakukan di bawah ini di file environment.rb Anda.

ENV ['RAILS_ENV'] || = 'produksi'

Jika aplikasi Anda berjalan di lingkungan hosting bersama atau penumpang phushion, Anda mungkin perlu melakukan perubahan dalam .httaccess (di dalam folder publik) dan mengatur mode sebagai produksi.

Rakesh
sumber