Yanıtlar:
Sinatra SSS bölümüne bakın ,
"Sinatra uygulamamın değişikliklerde yeniden yüklenmesini nasıl sağlayabilirim?"
Öncelikle, Ruby'de işlem içi kodun yeniden yüklenmesi zordur ve her senaryo için çalışan bir çözüme sahip olmak teknik olarak imkansızdır.
Bu nedenle işlem dışı yeniden yükleme yapmanızı öneririz.
Henüz yapmadıysanız, önce yeniden çalıştırmayı yüklemeniz gerekir :
$ gem install rerun
Şimdi Sinatra uygulamanızı şöyle başlatırsanız:
$ ruby app.rb
Yeniden yüklemek için tek yapmanız gereken bunun yerine şunu yapmaktır:
$ rerun 'ruby app.rb'
Örneğin raf kullanıyorsanız, bunun yerine aşağıdakileri yapın:
$ rerun 'raket'
Kaptın bu işi.
Hala işlem içi yeniden yüklemeyi istiyorsanız, kontrol edin
Sinatra::Reloader
.
rerun
. Varsayılan seçeneklerle sınırlı değilsiniz, yani rerun 'rackup'
. Herhangi bir sunucuyu herhangi bir bağlantı noktasında çalıştırmak mümkündür. Puma'nın 5678 numaralı bağlantı noktasında nasıl çalıştırılacağına bir örnek -rerun 'rackup -s puma -p 5678 app/sinatra/config.ru'
gem yüklemek sinatra-yeniden yükleyici
require 'sinatra'
require 'sinatra/reloader'
Not : Yalnızca sinatra işleyicilerini (ve belki bazı sinatra sunucu yapılandırma komutlarını) yeniden yükleyecektir, ancak manuel olarak yeniden yüklemeniz gereken özel dosyaları yüklemez.
9 yıl sonra UDP: o kullanan diğer dosyaları yeniden zaten mümkün gibi görünüyor also_reload
, dont_reload
ve after_reload
- https://github.com/sinatra/sinatra/pull/1150
require "./my-file"
Başarısız yapıyorum
require
zaten gerekliyse dosyayı yeniden yüklemez. Onun load
yerine sen .
server.rb
Harici dosyamı yeniden yüklemek için yine de yeniden kaydetmem gerekiyor . Harici dosyamı tek başına kontrol etmiyor, bu yüzden harici dosyamda sever.rb
her değişiklik yaptığımda yeniden kaydetmem gerekiyor . shotgun bu konuda daha iyi çalışıyor gibi görünüyor, ancak aynı zamanda veritabanı oturumlarını yeniden yüklüyor gibi görünüyor.
configure :development do |c| require 'sinatra/reloader' c.also_reload "./lib/*.rb" c.also_reload "./controllers/*.rb" c.also_reload "./init/*.rb" end
Uygulamayı Passenger Standalone ile çalıştırdığınızda , sadece bir tmp/always_restart
dosya oluşturun:
$ touch tmp/always_restart.txt
Daha fazla bilgi için Yolcu belgelerine bakın .
Av Tüfeği mücevherini seviyorum. Modüler bir Sinatra uygulaması kullanıyorsanız ve bir config.ru dosyanız varsa, çalıştırması kolaydır.
shotgun config.ru
Buradaki cevheri kontrol edin . Oldukça basittir ve konfigürasyona gerek yoktur.
Windows'ta bunun için yeniden başlatma gemimi kullanıyorum :
restart ruby my_app.rb
veya rackup ile:
restart rackup
Daha fazla bilgi için buraya bakın , umarım yararlı bulursunuz.
Güvenlik askısı kullanabilirsin. Dblock.org'daki bir makaleden kaldırıldı :
Bunu Gemfile'ınıza ekleyin:
group :development do
gem "guard"
gem "guard-bundler"
gem "guard-rack"
end
Ardından, Guardfile
bu içerikle projenizin kökünde bir oluşturun :
guard 'bundler' do
watch('Gemfile')
end
guard 'rack' do
watch('Gemfile.lock')
watch(%r{^(config|app|api)/.*})
end
Son olarak, Guard'ı şu şekilde çalıştırın: bundle exec guard
ve rackup
her seferinde yeniden yüklenecektir.