Odpowiedzi:
Zobacz Sinatra FAQ ,
„Jak mogę ponownie załadować moją aplikację Sinatra po zmianach?”
Po pierwsze, ponowne ładowanie kodu w trakcie procesu w Rubim jest trudne, a posiadanie rozwiązania działającego w każdym scenariuszu jest technicznie niemożliwe.
Dlatego zalecamy przeładowywanie poza procesem.
Najpierw musisz zainstalować ponownie, jeśli jeszcze tego nie zrobiłeś:
$ gem install rerun
Teraz, jeśli uruchomisz aplikację Sinatra w ten sposób:
$ ruby app.rb
Zamiast tego wystarczy wykonać następujące czynności:
$ rerun 'ruby app.rb'
Jeśli na przykład używasz kopii zapasowej, wykonaj następujące czynności:
$ rerun 'rackup'
Masz pomysł.
Jeśli nadal chcesz przeładować w trakcie procesu, sprawdź
Sinatra::Reloader
.
rerun
. Nie jesteś ograniczony domyślnymi opcjami, tj rerun 'rackup'
. Możliwe jest uruchomienie dowolnego serwera na dowolnym porcie. Oto przykład, jak uruchomić Pumę na porcie numer 5678 -rerun 'rackup -s puma -p 5678 app/sinatra/config.ru'
gem zainstaluj sinatra-reloader
require 'sinatra'
require 'sinatra/reloader'
Uwaga : przeładuje tylko programy obsługi sinatry (i być może niektóre komendy konfiguracyjne serwera sinatra), ale nie pliki niestandardowe, które trzeba przeładować ręcznie.
UPD po 9 latach: Wygląda na to, że jest już możliwe, aby przeładować innych plików za pomocą also_reload
, dont_reload
i after_reload
- https://github.com/sinatra/sinatra/pull/1150
require "./my-file"
bez sukcesu
require
nie ładuje ponownie pliku, jeśli był już wymagany. Ty load
zamiast tego.
server.rb
plik, aby ponownie załadował mój zewnętrzny plik. Nie sprawdza samego pliku zewnętrznego, więc muszę ponownie zapisywać mój za sever.rb
każdym razem, gdy wprowadzam zmiany w moim zewnętrznym pliku. strzelba wydaje się działać lepiej pod tym względem, ale wydaje się również, że ponownie ładuje sesje bazy danych.
configure :development do |c| require 'sinatra/reloader' c.also_reload "./lib/*.rb" c.also_reload "./controllers/*.rb" c.also_reload "./init/*.rb" end
Kiedy uruchamiasz aplikację z Passenger Standalone , po prostu utwórz tmp/always_restart
plik:
$ touch tmp/always_restart.txt
Więcej informacji można znaleźć w dokumentacji pasażera .
Podoba mi się klejnot Shotgun. Jeśli używasz modułowej aplikacji Sinatra i masz plik config.ru, jest ona łatwa do uruchomienia.
shotgun config.ru
Sprawdź klejnot tutaj . Jest to dość proste i nie wymaga konfiguracji.
W systemie Windows używam mojego klejnotu restartu do tego:
restart ruby my_app.rb
lub z rackup:
restart rackup
Zobacz tutaj, aby uzyskać więcej informacji, mam nadzieję, że okażą się przydatne.
Możesz użyć stelaża. Zaczerpnięte z artykułu na dblock.org :
Dodaj to do swojego Gemfile:
group :development do
gem "guard"
gem "guard-bundler"
gem "guard-rack"
end
Następnie utwórz Guardfile
w katalogu głównym swojego projektu następującą zawartość:
guard 'bundler' do
watch('Gemfile')
end
guard 'rack' do
watch('Gemfile.lock')
watch(%r{^(config|app|api)/.*})
end
Na koniec uruchom Guard, w ten sposób: bundle exec guard
i rackup
będzie ładował się za każdym razem.