Bagaimana saya bisa mengubah aplikasi Rails saya untuk berjalan dalam mode produksi? Apakah ada file config, environment.rb misalnya, untuk melakukan itu?
Bagaimana saya bisa mengubah aplikasi Rails saya untuk berjalan dalam mode produksi? Apakah ada file config, environment.rb misalnya, untuk melakukan itu?
Jawaban:
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.
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
Pastikan sepenuhnya bahwa setelah Penumpang diatur Anda telah mengedit /etc/httpd/conf/httpd.conf
file untuk mencerminkan struktur direktori Anda. Anda ingin mengarahkan DocumentRoot ke proyek Rails Anda / folder publik Di mana saja dalam httpd.conf
file yang memiliki dir semacam ini: /var/www/html/your_application/public
perlu diperbarui atau semuanya akan sangat frustasi. Saya tidak bisa cukup menekankan hal ini.
Nyalakan ulang server (atau Apache setidaknya - service httpd restart
)
Masukkan folder proyek Rails Anda /var/www/html/your_application
dan 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).
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.
RAILS_ENV=production rake db:migrate
RAILS_ENV=production rake assets:precompile
jika Anda melayani aset statis. Ini akan mendorong js, css, file gambar ke /public
folder.
RAILS_ENV=production rails s
Pada titik ini aplikasi Anda seharusnya tersedia di http://something.com/whatever
bukan :3000
. Jika tidak, passenger-memory-stats
dan 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.
Sekarang ini akan menjadi
rails server -e production
Atau, lebih ringkas
rails s -e production
Ini berfungsi untuk proyek rel 3+.
rails s -e production
server -e production
?
production
selalu merupakan default.
echo "export RAILS_ENV=production" >> ~/.bash_profile
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)
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'
ENV['RAILS_ENV'] ||= 'production'
bisa diterapkan pada mereka juga?
Ubah variabel lingkungan RAILS_ENV
menjadi production
.
~/.bashrc
atau ~/.bash_profile
atau hanyaexport RAILS_ENV=production"
$> export RAILS_ENV=production
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.
Dalam Rails 3
Menambahkan Rails.env = ActiveSupport::StringInquirer.new('production')
ke dalam application.rb dan rails s
akan 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
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
untuk server default: rails s -e production
untuk port server costum: rails s -p [port] -e produksi, mis. rel s -p 3002 -e produksi
Secara default server berjalan di lingkungan pengembangan: $ rails s
Jika Anda berjalan di lingkungan produksi: $ rails s -e production
atau$ RAILS_ENV=production rails s
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.