ฉันจะเปลี่ยนแอพพลิเคชั่น Rails ของฉันให้ทำงานในโหมดการผลิตได้อย่างไร? มีไฟล์ config, environment.rb เป็นตัวอย่างหรือไม่?
ฉันจะเปลี่ยนแอพพลิเคชั่น Rails ของฉันให้ทำงานในโหมดการผลิตได้อย่างไร? มีไฟล์ config, environment.rb เป็นตัวอย่างหรือไม่?
คำตอบ:
วิธีการตั้งค่าและเรียกใช้แอพ Rails 4 ในโหมดการผลิต (ขั้นตอน) โดยใช้ Apache และ Phusion Passenger:
ปกติคุณจะสามารถที่จะเข้าสู่โครงการทางรถไฟของคุณrails s
และได้รับรุ่นพัฒนาแอปของคุณhttp://something.com:3000 โหมดการผลิตเป็นเรื่องยากเล็กน้อยในการกำหนดค่า
ฉันยุ่งกับสิ่งนี้มาระยะหนึ่งแล้วฉันจึงคิดว่าฉันจะเขียนสิ่งนี้ให้กับมือใหม่ (เช่นตัวฉันเอง) มีการปรับแต่งเล็กน้อยที่แพร่กระจายทั่วอินเทอร์เน็ตและคิดว่ามันอาจจะง่ายขึ้น
อ้างถึงคู่มือนี้สำหรับการตั้งค่าหลักของเซิร์ฟเวอร์ (CentOS 6 แต่ควรใช้กับ Linux เกือบทุกรสชาติ): https://www.digitalocean.com/community/tutorials/how-to-setup-a-rails-4 -App ที่มี Apache และผู้โดยสารบน CentOS-6
ตรวจสอบให้แน่ใจว่าหลังจากติดตั้งผู้โดยสารเสร็จแล้วคุณได้แก้ไข/etc/httpd/conf/httpd.conf
ไฟล์เพื่อแสดงโครงสร้างไดเรกทอรีของคุณ คุณต้องการที่จะชี้ DocumentRoot ไปที่โฟลเดอร์ Rails project / public ที่ใดก็ได้ในhttpd.conf
ไฟล์ที่มี dir ประเภทนี้: /var/www/html/your_application/public
ต้องมีการอัพเดทไม่เช่นนั้นทุกอย่างจะน่าหงุดหงิดมาก ฉันไม่สามารถความเครียดนี้พอ
รีบูตเซิร์ฟเวอร์ (หรือ Apache อย่างน้อยที่สุด - service httpd restart
)
ใส่โฟลเดอร์โครงการทางรถไฟของคุณและเริ่มการโยกย้ายด้วย/var/www/html/your_application
rake db:migrate
ตรวจสอบให้แน่ใจว่ามีตารางฐานข้อมูลอยู่แม้ว่าคุณวางแผนที่จะเพิ่มตารางในภายหลัง (ซึ่งเป็นส่วนหนึ่งของขั้นตอนที่ 1)
RAILS_ENV=production rake secret
- สิ่งนี้จะสร้าง secret_key ที่คุณสามารถเพิ่มconfig/secrets.yml
ได้ คุณสามารถคัดลอก / วางสิ่งนี้ลงใน config / secret.yml เพื่อประโยชน์ในการเรียกใช้สิ่งต่าง ๆ แม้ว่าฉันจะไม่แนะนำก็ตาม โดยส่วนตัวฉันทำตามขั้นตอนนี้เพื่อให้แน่ใจว่าทุกอย่างทำงานได้ดีจากนั้นเปลี่ยนกลับและส่งต่อในภายหลัง
RAILS_ENV=production rake db:migrate
RAILS_ENV=production rake assets:precompile
ถ้าคุณให้บริการสินทรัพย์คงที่ นี่จะเป็นการพุชไฟล์ js, css, ไฟล์ลงใน/public
โฟลเดอร์
RAILS_ENV=production rails s
ณ จุดนี้แอปของคุณควรจะสามารถใช้ได้ที่แทนhttp://something.com/whatever
:3000
ถ้าไม่passenger-memory-stats
และดูว่ามีรายการที่ชอบ908 469.7 MB 90.9 MB Passenger RackApp: /var/www/html/projectname
ฉันอาจคิดถึงบางสิ่งที่ชั่วร้าย แต่สิ่งนี้ได้ผลสำหรับฉันในอดีต
ตอนนี้จะเป็น
rails server -e production
หรือกะทัดรัดกว่า
rails s -e production
มันใช้งานได้กับราง 3+ โครงการ
rails s -e production
server -e production
กับพวกเขา?
production
เป็นค่าเริ่มต้นอย่างสม่ำเสมอ
echo "export RAILS_ENV=production" >> ~/.bash_profile
หากคุณกำลังใช้งานPassengerอยู่ค่าเริ่มต้นคือการใช้งานจริงใน apache conf:
<VirtualHost *:80>
ServerName application_name.rails.local
DocumentRoot "/Users/rails/application_name/public"
RailsEnv production ## This is the default
</VirtualHost>
หากคุณเพิ่งใช้เซิร์ฟเวอร์ในท้องถิ่นที่มี mongrel หรือ webrick คุณสามารถทำได้:
./script/server -e production
หรือทุบตี:
RAILS_ENV=production ./script/server
ที่จริงแล้วการแทนที่ค่าคงที่ RAILS_ENV ใน enviornment.rb น่าจะเป็นทางเลือกสุดท้ายของคุณเพราะมันอาจจะไม่อยู่ต่อไป (ดูคำตอบอื่นที่ฉันให้ไว้)
หากคำแนะนำของ mipadiไม่ทำงานให้เพิ่มสิ่งนี้ใน 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'
นำไปใช้กับพวกเขาด้วยหรือไม่
เปลี่ยนตัวแปรสภาพแวดล้อมในการRAILS_ENV
production
~/.bashrc
หรือ~/.bash_profile
เพียงexport RAILS_ENV=production"
$> export RAILS_ENV=production
คุณยังสามารถส่งต่อสิ่งแวดล้อมไปยังสคริปต์ / เซิร์ฟเวอร์:
$ script/server -e production
rails s -e production
นี้จะทำงานเซิร์ฟเวอร์ด้วย=RAILS_ENV
'production'
นอกจากนี้คุณต้องกำหนดเส้นทางสินทรัพย์ใน production.rb
config.serve_static_assets = true
หากไม่มีสิ่งนี้สินทรัพย์ของคุณจะไม่ถูกโหลด
RAILS_ENV=production rails s
หรือ
rails s -e production
โดยสภาพแวดล้อมเริ่มต้นคือการพัฒนา
ตามที่คนอื่นโพสต์: rails server -e production
หรือความชอบส่วนตัวของฉัน: RAILS_ENV=production
rails s
ในRails 3
การเพิ่มRails.env = ActiveSupport::StringInquirer.new('production')
เข้าไปใน application.rb และrails s
จะทำงานเหมือนกับrails 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
ไม่ใช่วิธีที่ดีในการเรียกใช้เซิร์ฟเวอร์ rails ในสภาพแวดล้อมการผลิตโดย "rails server -e production" เพราะ Rails จะทำงานเป็นแอพพลิเคชั่นแบบเธรดเดียวและสามารถตอบกลับคำขอ HTTP ครั้งละหนึ่งรายการเท่านั้น
บทความที่ดีที่สุดเกี่ยวกับสภาพแวดล้อมการผลิตสำหรับรางคือสภาพแวดล้อมการผลิต - ราง 3
สำหรับเซิร์ฟเวอร์เริ่มต้น: rails s -e production
สำหรับพอร์ตเซิร์ฟเวอร์ costum: rails s -p [port] -e production Rails s -p 3002 -e การผลิต
โดยเซิร์ฟเวอร์เริ่มต้นทำงานบนสภาพแวดล้อมการพัฒนา: $ rails s
หากคุณกำลังทำงานในสภาพแวดล้อมการผลิต: $ rails s -e production
หรือ$ RAILS_ENV=production rails s
โปรดตรวจสอบให้แน่ใจว่าคุณได้ทำสิ่งต่อไปนี้ในไฟล์ environment.rb ของคุณ
ENV ['RAILS_ENV'] || = 'การผลิต'
หากแอปพลิเคชันของคุณทำงานในสภาพแวดล้อมการโฮสต์ที่ใช้ร่วมกันหรือผู้โดยสารเบาะอากาศคุณอาจจำเป็นต้องทำการเปลี่ยนแปลงใน. httaccess (ภายในโฟลเดอร์สาธารณะ) และตั้งค่าเป็นโหมดการใช้งานจริง