Rails uygulamasını üretime değiştirme


190

Rails uygulamamı üretim modunda çalışacak şekilde nasıl değiştirebilirim? Bunun için çevre.rb gibi bir yapılandırma dosyası var mı?


2
Görünüşe göre ikinci cevabın çok daha fazla oyu var, bunu hızlı bir şekilde gözden geçirmeye ve onunla ilgili herhangi bir sorun yoksa ikinci cevabı kabul etmeye istekli misiniz? Sadece gelecekteki ziyaretçilere yardımcı olacak. Thx :)
Evolve

Yanıtlar:


73

Apache ve Phusion Passenger kullanarak Rails 4 uygulamasını Üretim modunda (adım adım) kurma ve çalıştırma:

Normalde Rails projenize girebilir rails sve http://something.com:3000 adresinden uygulamanızın geliştirme sürümünü alabilirsiniz . Üretim modu yapılandırması biraz daha zordur.

Bir süredir bununla uğraşıyorum, bu yüzden yeni başlayanlar için (kendim gibi) yazacağımı düşündüm. İnternette yayılmış ve bunun daha kolay olabileceğini düşündüğüm birkaç küçük ayar var.

  1. Sunucunun temel kurulumu için bu kılavuza bakın (CentOS 6, ancak neredeyse tüm Linux lezzetleri için geçerli olmalıdır): https://www.digitalocean.com/community/tutorials/how-to-setup-a-rails-4 -app-ile-apachenin-ve yolcu-on-centos-6

  2. Yolcu kurulduktan sonra /etc/httpd/conf/httpd.confdosyayı dizin yapınızı yansıtacak şekilde düzenlediğinizden emin olun. DocumentRoot'u Rails projenize / ortak klasörünüze yönlendirmek istiyorsunuz.httpd.conf Dosyanın herhangi bir yerinde bu tür bir dizinin bulunduğu yere gelmek istiyorsunuz : /var/www/html/your_application/publicgüncellenmesi gerekiyor ya da her şey çok sinir bozucu olacak. Bunu yeterince vurgulamıyorum.

  3. Sunucuyu (veya en azından Apache'yi yeniden başlatın - service httpd restart)

  4. Rails proje klasörünüzü girin /var/www/html/your_applicationve taşıma işlemini ile başlatın rake db:migrate. Daha sonra tablo eklemeyi planlasanız bile bir veritabanı tablosunun var olduğundan emin olun (bu aynı zamanda 1. adımın bir parçasıdır).

  5. RAILS_ENV=production rake secret- bu, ekleyebileceğiniz bir secret_key oluşturur config/secrets.yml. Bunu yapmamanızı tavsiye etmeme rağmen , kopyala / yapıştır komutlarını config / secrets.yml dosyasına yapıştırabilirsiniz. Şahsen, her şeyin çalıştığından emin olmak için bu adımı yapıyorum, sonra geri değiştirip daha sonra kaynak yapıyorum.

  6. RAILS_ENV=production rake db:migrate

  7. RAILS_ENV=production rake assets:precompilestatik varlıklar sunuyorsanız. Bu js, css, resim dosyalarını /publicklasöre itecektir .

  8. RAILS_ENV=production rails s

Bu noktada uygulamanızın http://something.com/whateveryerine kullanılabilir olması gerekir :3000. Değilse passenger-memory-statsve benzer bir giriş olup olmadığına bakın908 469.7 MB 90.9 MB Passenger RackApp: /var/www/html/projectname

Muhtemelen iğrenç bir şey kaçırdım, ama bu geçmişte benim için çalıştı.


2
Bu cevabın stackoverflow belgelerine taşınması gerektiğini düşünüyorum.
Whitecat

Apache gibi bir web içeriği dağıtımı kullanmak istemiyorsanız, RAILS_ENV = üretiminin yanına bir RAILS_SERVE_STATIC_FILES = 1 ekleyebileceğinizi, bu da rayların her dosyaya hizmet edeceği anlamına geldiğini ekleyeceğim. gerçek üretim devleti ...
3d0

351

Bu şimdi

rails server -e production

Veya daha kompakt

rails s -e production

Raylar 3+ projeler için çalışır.


33
veya kısa versiyonrails s -e production
Pavel Nikolov

2
Heroku gibi bulut hizmetleri ne olacak? server -e productionOnlara nasıl koşulur?
Yeşil

Bulut hizmetleri genellikle ortamı belirtme seçeneklerine sahiptir, ancak bu ortamlarda productionher zaman varsayılan değerdir.
James Billingham

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

Çok tercih edilen cevap, bu onu StackOverflow belgelerine yapmalıdır.
dmanexe

61

Yolcu üzerinde çalışıyorsanız , varsayılan olarak üretimde çalıştırmak, apache confinizde:

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

Sadece melez veya webrick ile yerel bir sunucu çalıştırıyorsanız, şunları yapabilirsiniz:

./script/server -e production

veya bash:

RAILS_ENV=production ./script/server

aslında enviornment.rb dosyasındaki RAILS_ENV sabitini geçersiz kılma muhtemelen son çare olmalısınız, çünkü muhtemelen sette kalmayacaktır (buna verdiğim başka bir cevaba bakınız )


54

Eğer mipadi önerisi değil çalışır, buna config / environment.rb eklemek

# 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 gibi bulut hizmetleri ne olacak? Mayıs ENV['RAILS_ENV'] ||= 'production'onlara da uygulanabilir?
Yeşil

Bu dosyayı uzun zamandır düzenledim ve unuttum .. hatırlattığınız için teşekkürler .. çok zaman kazandım
Agnes

19

Ortam değişkenini olarak RAILS_ENVdeğiştirin production.


3
ortam değişkeni nerede bulunur?
BKSpurgeon

olabilir ~/.bashrcya ~/.bash_profileda sadece olabilirexport RAILS_ENV=production"
Shimaa Marzouk


18

Ayrıca ortamı komut dosyasına / sunucuya da aktarabilirsiniz:

$ script/server -e production

12
rails s -e production

Bu, sunucuyu RAILS_ENV= ile çalıştıracaktır 'production'.

Bunun dışında, varlıklar yolunu production.rb

config.serve_static_assets = true

Bu olmadan varlıklarınız yüklenmez.


Üzgünüm ... oy vermek istediğinde oy kullandı. Hatayı düzeltmek ve kaldırmak için hafif bir düzenleme yapıldı.
tomd

7
RAILS_ENV=production rails s

VEYA

rails s -e production

Varsayılan olarak ortam geliştirmedir.


5

Diğerlerinin gönderdiği gibi: rails server -e production

Ya da, kişisel faşum: RAILS_ENV=production rails s


2

Gelen Raylar 3

Rails.env = ActiveSupport::StringInquirer.new('production')Application.rb dosyasına eklenir ve rails saynı şekilde çalışırrails 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 sunucusunu üretim ortamında "rails server -e production" ile çalıştırmanın iyi bir yolu değildir, çünkü rails tek iş parçacıklı bir uygulama olarak çalışır ve bir seferde yalnızca bir HTTP isteğine yanıt verebilir.

Raylar için üretim ortamı hakkında en iyi makale Üretim Ortamları - Raylar 3


3
Link rot ... olsa
wayback

1

varsayılan sunucu için: raylar s-e üretimi

kostüm sunucusu portu için: raylar s -p [port] -e üretimi, ör. raylar s -p 3002 -e üretim


1

Varsayılan olarak sunucu geliştirme ortamında çalışır: $ rails s

Üretim ortamında çalışıyorsanız: $ rails s -e productionveya$ RAILS_ENV=production rails s


0

Lütfen environment.rb dosyanızda aşağıda yaptığınızdan emin olun.

ENV ['RAILS_ENV'] || = 'üretim'

Uygulamanız paylaşılan barındırma ortamında veya yastık yolcusunda çalışıyorsa, .httaccess'te (ortak klasör içinde) değişiklik yapmanız ve modu üretim olarak ayarlamanız gerekebilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.