เปลี่ยนแอพพลิเคชั่น Rails เป็น Production


190

ฉันจะเปลี่ยนแอพพลิเคชั่น Rails ของฉันให้ทำงานในโหมดการผลิตได้อย่างไร? มีไฟล์ config, environment.rb เป็นตัวอย่างหรือไม่?


2
ดูเหมือนว่าคำตอบที่สองมีคะแนนโหวตมากกว่านี้คุณจะยินดีให้คำวิจารณ์นี้อย่างรวดเร็วและยอมรับคำตอบที่สองหากคุณไม่มีปัญหาใด ๆ จะช่วยผู้เยี่ยมชมในอนาคต ขอบคุณ :)
วิวัฒนาการ

คำตอบ:


73

วิธีการตั้งค่าและเรียกใช้แอพ Rails 4 ในโหมดการผลิต (ขั้นตอน) โดยใช้ Apache และ Phusion Passenger:

ปกติคุณจะสามารถที่จะเข้าสู่โครงการทางรถไฟของคุณrails sและได้รับรุ่นพัฒนาแอปของคุณhttp://something.com:3000 โหมดการผลิตเป็นเรื่องยากเล็กน้อยในการกำหนดค่า

ฉันยุ่งกับสิ่งนี้มาระยะหนึ่งแล้วฉันจึงคิดว่าฉันจะเขียนสิ่งนี้ให้กับมือใหม่ (เช่นตัวฉันเอง) มีการปรับแต่งเล็กน้อยที่แพร่กระจายทั่วอินเทอร์เน็ตและคิดว่ามันอาจจะง่ายขึ้น

  1. อ้างถึงคู่มือนี้สำหรับการตั้งค่าหลักของเซิร์ฟเวอร์ (CentOS 6 แต่ควรใช้กับ Linux เกือบทุกรสชาติ): https://www.digitalocean.com/community/tutorials/how-to-setup-a-rails-4 -App ที่มี Apache และผู้โดยสารบน CentOS-6

  2. ตรวจสอบให้แน่ใจว่าหลังจากติดตั้งผู้โดยสารเสร็จแล้วคุณได้แก้ไข/etc/httpd/conf/httpd.confไฟล์เพื่อแสดงโครงสร้างไดเรกทอรีของคุณ คุณต้องการที่จะชี้ DocumentRoot ไปที่โฟลเดอร์ Rails project / public ที่ใดก็ได้ในhttpd.confไฟล์ที่มี dir ประเภทนี้: /var/www/html/your_application/publicต้องมีการอัพเดทไม่เช่นนั้นทุกอย่างจะน่าหงุดหงิดมาก ฉันไม่สามารถความเครียดนี้พอ

  3. รีบูตเซิร์ฟเวอร์ (หรือ Apache อย่างน้อยที่สุด - service httpd restart)

  4. ใส่โฟลเดอร์โครงการทางรถไฟของคุณและเริ่มการโยกย้ายด้วย/var/www/html/your_application rake db:migrateตรวจสอบให้แน่ใจว่ามีตารางฐานข้อมูลอยู่แม้ว่าคุณวางแผนที่จะเพิ่มตารางในภายหลัง (ซึ่งเป็นส่วนหนึ่งของขั้นตอนที่ 1)

  5. RAILS_ENV=production rake secret- สิ่งนี้จะสร้าง secret_key ที่คุณสามารถเพิ่มconfig/secrets.ymlได้ คุณสามารถคัดลอก / วางสิ่งนี้ลงใน config / secret.yml เพื่อประโยชน์ในการเรียกใช้สิ่งต่าง ๆ แม้ว่าฉันจะไม่แนะนำก็ตาม โดยส่วนตัวฉันทำตามขั้นตอนนี้เพื่อให้แน่ใจว่าทุกอย่างทำงานได้ดีจากนั้นเปลี่ยนกลับและส่งต่อในภายหลัง

  6. RAILS_ENV=production rake db:migrate

  7. RAILS_ENV=production rake assets:precompileถ้าคุณให้บริการสินทรัพย์คงที่ นี่จะเป็นการพุชไฟล์ js, css, ไฟล์ลงใน/publicโฟลเดอร์

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

ฉันอาจคิดถึงบางสิ่งที่ชั่วร้าย แต่สิ่งนี้ได้ผลสำหรับฉันในอดีต


2
ฉันรู้สึกว่าคำตอบนี้ควรย้ายไปยังเอกสารประกอบ stackoverflow
Whitecat

ฉันจะเพิ่มว่าถ้าคุณไม่ต้องการใช้เนื้อหาเว็บที่ส่งเช่น apache คุณสามารถเพิ่ม RAILS_SERVE_STATIC_FILES = 1 ถัดจาก RAILS_ENV = การผลิตนั่นหมายความว่าทางรถไฟจะให้บริการทุกไฟล์ดังนั้นจะไม่แนะนำสิ่งนี้ให้กับ สถานะการผลิตจริง ...
3d0

351

ตอนนี้จะเป็น

rails server -e production

หรือกะทัดรัดกว่า

rails s -e production

มันใช้งานได้กับราง 3+ โครงการ


33
หรือเวอร์ชั่นสั้น ๆrails s -e production
Pavel Nikolov

2
แล้วบริการคลาวด์อย่าง Heroku ล่ะ? วิธีการทำงานserver -e productionกับพวกเขา?
สีเขียว

บริการคลาวด์มักจะมีตัวเลือกในการระบุสภาพแวดล้อม แต่ในพวกเขาproductionเป็นค่าเริ่มต้นอย่างสม่ำเสมอ
James Billingham

2
echo "export RAILS_ENV=production" >> ~/.bash_profile
Meekohi

คำตอบที่ต้องการมากคำตอบนี้ควรทำให้เป็นเอกสารของ StackOverflow
dmanexe

61

หากคุณกำลังใช้งาน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 น่าจะเป็นทางเลือกสุดท้ายของคุณเพราะมันอาจจะไม่อยู่ต่อไป (ดูคำตอบอื่นที่ฉันให้ไว้)


54

หากคำแนะนำของ 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'

แล้วบริการคลาวด์อย่าง Heroku ล่ะ? อาจENV['RAILS_ENV'] ||= 'production'นำไปใช้กับพวกเขาด้วยหรือไม่
สีเขียว

ฉันแก้ไขไฟล์นี้นานแล้วลืม .. ขอบคุณสำหรับการเตือน .. ประหยัดเวลาได้มาก
Agnes

19

เปลี่ยนตัวแปรสภาพแวดล้อมในการRAILS_ENVproduction


3
ตัวแปรสภาพแวดล้อมอยู่ที่ไหน?
BKSpurgeon

อาจจะอยู่ใน~/.bashrcหรือ~/.bash_profileเพียงexport RAILS_ENV=production"
Shimaa Marzouk


18

คุณยังสามารถส่งต่อสิ่งแวดล้อมไปยังสคริปต์ / เซิร์ฟเวอร์:

$ script/server -e production

12
rails s -e production

นี้จะทำงานเซิร์ฟเวอร์ด้วย=RAILS_ENV'production'

นอกจากนี้คุณต้องกำหนดเส้นทางสินทรัพย์ใน production.rb

config.serve_static_assets = true

หากไม่มีสิ่งนี้สินทรัพย์ของคุณจะไม่ถูกโหลด


ขออภัย ... โหวตเมื่อโหวตขึ้น แก้ไขเล็กน้อยเพื่อแก้ไขข้อผิดพลาดและเพิ่มขึ้น
tomd

7
RAILS_ENV=production rails s

หรือ

rails s -e production

โดยสภาพแวดล้อมเริ่มต้นคือการพัฒนา


5

ตามที่คนอื่นโพสต์: rails server -e production

หรือความชอบส่วนตัวของฉัน: RAILS_ENV=production rails s


2

ใน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

2

ไม่ใช่วิธีที่ดีในการเรียกใช้เซิร์ฟเวอร์ rails ในสภาพแวดล้อมการผลิตโดย "rails server -e production" เพราะ Rails จะทำงานเป็นแอพพลิเคชั่นแบบเธรดเดียวและสามารถตอบกลับคำขอ HTTP ครั้งละหนึ่งรายการเท่านั้น

บทความที่ดีที่สุดเกี่ยวกับสภาพแวดล้อมการผลิตสำหรับรางคือสภาพแวดล้อมการผลิต - ราง 3


3
Link rot ... มีอยู่ในเครื่อง
เวย์แบ็ค

1

สำหรับเซิร์ฟเวอร์เริ่มต้น: rails s -e production

สำหรับพอร์ตเซิร์ฟเวอร์ costum: rails s -p [port] -e production Rails s -p 3002 -e การผลิต


1

โดยเซิร์ฟเวอร์เริ่มต้นทำงานบนสภาพแวดล้อมการพัฒนา: $ rails s

หากคุณกำลังทำงานในสภาพแวดล้อมการผลิต: $ rails s -e productionหรือ$ RAILS_ENV=production rails s


0

โปรดตรวจสอบให้แน่ใจว่าคุณได้ทำสิ่งต่อไปนี้ในไฟล์ environment.rb ของคุณ

ENV ['RAILS_ENV'] || = 'การผลิต'

หากแอปพลิเคชันของคุณทำงานในสภาพแวดล้อมการโฮสต์ที่ใช้ร่วมกันหรือผู้โดยสารเบาะอากาศคุณอาจจำเป็นต้องทำการเปลี่ยนแปลงใน. httaccess (ภายในโฟลเดอร์สาธารณะ) และตั้งค่าเป็นโหมดการใช้งานจริง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.