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?


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.


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+.


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)


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'

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.


3
di mana variabel lingkungan berada?
BKSpurgeon

mungkin berlokasi di ~/.bashrcatau ~/.bash_profileatau hanyaexport RAILS_ENV=production"
Shimaa Marzouk


18

Anda juga dapat meneruskan lingkungan ke skrip / server:

$ script/server -e production

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.


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.


5

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

Atau, fave pribadi saya: RAILS_ENV=production rails s


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

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


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


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


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.