Я использую
# my_app.rb
load 'index.rb'
и запустите сервер вот так
ruby my_app.rb
но он никогда не перезагружает никаких изменений, которые я сделал на странице индекса.
Я что-то здесь пропустил?
«Как мне перезагрузить приложение Sinatra при внесении изменений?»
Во-первых, перезагрузка внутрипроцессного кода в Ruby сложна, а наличие решения, работающего для любого сценария, технически невозможно.
Вот почему мы рекомендуем делать перезагрузку вне процесса.
Для начала вам нужно установить rerun, если вы еще этого не сделали:
$ gem install rerun
Теперь, если вы запустите приложение Sinatra следующим образом:
$ ruby app.rb
Все, что вам нужно сделать для перезагрузки, это сделать следующее:
$ rerun 'ruby app.rb'
Если вы, например, используете стойку, вместо этого сделайте следующее:
$ rerun 'Rackup'
Вы уловили идею.
Если вам все еще нужна перезагрузка в процессе, проверьте
Sinatra::Reloader
.
rerun
. Вы не ограничены с параметрами по умолчанию , то естьrerun 'rackup'
. Можно запустить любой сервер на любом порту. Вот пример того, как запустить Puma на порту 5678 -rerun 'rackup -s puma -p 5678 app/sinatra/config.ru'
Примечание : он перезагружает только обработчики sinatra (и, возможно, некоторые команды конфигурации сервера sinatra), но не пользовательские файлы, которые необходимо перезагружать вручную.
UPD через 9 лет: похоже, уже можно перезагружать другие файлы с помощью
also_reload
,dont_reload
иafter_reload
- https://github.com/sinatra/sinatra/pull/1150источник
require "./my-file"
безуспешноrequire
не перезагружает файл, если он уже требовался.load
Вместо этого ты .server.rb
, чтобы он перезагрузил мой внешний файл. Он не проверяет только мой внешний файл, поэтому мне приходится повторно сохранять егоsever.rb
каждый раз, когда я вношу изменения в свой внешний файл. В этом отношении дробовик работает лучше, но он также перезагружает сеансы базы данных.configure :development do |c| require 'sinatra/reloader' c.also_reload "./lib/*.rb" c.also_reload "./controllers/*.rb" c.also_reload "./init/*.rb" end
Вы можете использовать
rerun
драгоценный камень.ИЛИ если вы используете Rackup
источник
gem установить sinatra-reloader
Вы можете установить переменную среды для разработки и условно загрузить гем.
источник
Когда вы запускаете приложение в автономном режиме Passenger , просто создайте
tmp/always_restart
файл:См. Дополнительную информацию в документации для пассажиров .
источник
Мне нравится Дробовик. Если вы используете модульное приложение Sinatra и имеете файл config.ru, его легко запустить.
Проверьте драгоценный камень здесь . Это довольно просто и не требует настройки.
источник
В Windows я использую для этого свой гем перезапуска :
или со стойкой:
См. Здесь для получения дополнительной информации, надеюсь, вы найдете это полезным.
источник
Вы можете использовать стойку для охраны. Позаимствовано из статьи на dblock.org :
Добавьте это в свой Gemfile:
Затем создайте
Guardfile
в корне вашего проекта такой контент:Наконец, запустите Guard, например:,
bundle exec guard
иrackup
будет перезагружаться каждый раз.источник
Если вы измените только свои шаблоны, sinatra всегда будет их повторно отображать, если вы настроите среду для разработки:
источник