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ı?
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ı?
Yanıtlar:
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 s
ve 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.
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
Yolcu kurulduktan sonra /etc/httpd/conf/httpd.conf
dosyayı 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/public
güncellenmesi gerekiyor ya da her şey çok sinir bozucu olacak. Bunu yeterince vurgulamıyorum.
Sunucuyu (veya en azından Apache'yi yeniden başlatın - service httpd restart
)
Rails proje klasörünüzü girin /var/www/html/your_application
ve 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).
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.
RAILS_ENV=production rake db:migrate
RAILS_ENV=production rake assets:precompile
statik varlıklar sunuyorsanız. Bu js, css, resim dosyalarını /public
klasöre itecektir .
RAILS_ENV=production rails s
Bu noktada uygulamanızın http://something.com/whatever
yerine kullanılabilir olması gerekir :3000
. Değilse passenger-memory-stats
ve 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ı.
Bu şimdi
rails server -e production
Veya daha kompakt
rails s -e production
Raylar 3+ projeler için çalışır.
rails s -e production
server -e production
Onlara nasıl koşulur?
production
her zaman varsayılan değerdir.
echo "export RAILS_ENV=production" >> ~/.bash_profile
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 )
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'
ENV['RAILS_ENV'] ||= 'production'
onlara da uygulanabilir?
Ortam değişkenini olarak RAILS_ENV
değiştirin production
.
~/.bashrc
ya ~/.bash_profile
da sadece olabilirexport RAILS_ENV=production"
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.
Gelen Raylar 3
Rails.env = ActiveSupport::StringInquirer.new('production')
Application.rb dosyasına eklenir ve rails s
aynı ş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
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
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
Varsayılan olarak sunucu geliştirme ortamında çalışır: $ rails s
Üretim ortamında çalışıyorsanız: $ rails s -e production
veya$ RAILS_ENV=production rails s