ja używam
# my_app.rb
load 'index.rb'
i uruchom serwer w ten sposób
ruby my_app.rb
ale nigdy nie ładuje ponownie żadnych zmian, które wprowadziłem na stronie indeksu.
Czy coś tu przegapiłem?
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, tjrerun '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'
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
iafter_reload
- https://github.com/sinatra/sinatra/pull/1150źródło
require "./my-file"
bez sukcesurequire
nie ładuje ponownie pliku, jeśli był już wymagany. Tyload
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 zasever.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
Możesz użyć
rerun
klejnotu.LUB jeśli używasz kopii zapasowej
źródło
gem zainstaluj sinatra-reloader
Możesz ustawić zmienną środowiskową na programowanie i warunkowo załadować klejnot.
źródło
Kiedy uruchamiasz aplikację z Passenger Standalone , po prostu utwórz
tmp/always_restart
plik:Więcej informacji można znaleźć w dokumentacji pasażera .
źródło
Podoba mi się klejnot Shotgun. Jeśli używasz modułowej aplikacji Sinatra i masz plik config.ru, jest ona łatwa do uruchomienia.
Sprawdź klejnot tutaj . Jest to dość proste i nie wymaga konfiguracji.
źródło
W systemie Windows używam mojego klejnotu restartu do tego:
lub z rackup:
Zobacz tutaj, aby uzyskać więcej informacji, mam nadzieję, że okażą się przydatne.
źródło
Możesz użyć stelaża. Zaczerpnięte z artykułu na dblock.org :
Dodaj to do swojego Gemfile:
Następnie utwórz
Guardfile
w katalogu głównym swojego projektu następującą zawartość:Na koniec uruchom Guard, w ten sposób:
bundle exec guard
irackup
będzie ładował się za każdym razem.źródło
Jeśli zmienisz tylko swoje szablony, sinatra zawsze je wyśle, jeśli ustawisz środowisko na programowanie:
źródło