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.rbYeniden 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_reloadve after_reload- https://github.com/sinatra/sinatra/pull/1150
require "./my-file"Başarısız yapıyorum
requirezaten gerekliyse dosyayı yeniden yüklemez. Onun loadyerine sen .
server.rbHarici dosyamı yeniden yüklemek için yine de yeniden kaydetmem gerekiyor . Harici dosyamı tek başına kontrol etmiyor, bu yüzden harici dosyamda sever.rbher 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_restartdosya 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, Guardfilebu 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 guardve rackupher seferinde yeniden yüklenecektir.