Как заставить Sinatra автоматически перезагружать файл после каждого изменения?

Я использую

# my_app.rb
load 'index.rb'

и запустите серию вроде этого

ruby my_app.rb

но он никогда не перезагружает никаких изменений, внесенных мной на индексной странице.
Я что-то пропустил здесь?

Ответ 1

См. Часто задаваемые вопросы по Sinatra,

Как мне обновить приложение для Sinatra?

Во-первых, перезагрузка кода процесса в Ruby сложна и имеет решение, которое работает для каждого сценария, технически невозможно.

Вот почему мы рекомендуем вам выполнять перезагрузку вне процесса.

Сначала вам нужно установить rerun, если у вас уже есть:

 $ gem install rerun

Теперь, если вы запустите приложение Sinatra следующим образом:

$ ruby app.rb

Все, что вам нужно сделать для перезагрузки, - это сделать следующее:

$ rerun 'ruby app.rb'

Если вы, например, используете rackup, вместо этого следующее:

$rerun 'rackup'

Вы получаете идею.

Если вы все еще хотите перезагрузить процесс, проверьте Sinatra::Reloader.

Ответ 2

  gem install sinatra-reloader

require 'sinatra'
require 'sinatra/reloader'

Примечание: он будет перезагружать только обработчики sinatra (и, возможно, некоторые команды конфигурации сервера sinatra), но не настраиваемые файлы, которые необходимо перезагрузить вручную.

UPD через 9 лет: кажется, что уже можно перезагрузить другие файлы, используя also_reload, dont_reload и after_reload - https://github.com/sinatra/sinatra/pull/1150

Ответ 3

Вы можете использовать драгоценный камень rerun.

gem install rerun
rerun 'ruby app.rb' 

ИЛИ если вы используете rackup

rerun 'rackup'

Ответ 4

gem install sinatra-reloader

require 'sinatra/base'
require "sinatra/reloader"

class MyApp < Sinatra::Base
  register Sinatra::Reloader

  get '/' do
    "Hello Testing1!"
  end
end

Возможно, вы захотите установить переменную среды для разработки и условно загрузить драгоценный камень.

Ответ 6

Мне нравится драгоценный камень дробовика. Если вы используете модульное приложение Sinatra и имеете файл config.ru, его легко запустить.

shotgun config.ru

Проверьте драгоценный камень здесь. Это довольно прямолинейно, и никакой конфигурации не требуется.

Ответ 7

В Windows я использую перезапустить gem для этого:

restart ruby my_app.rb

или, с помощью rawnup:

restart rackup

Подробнее см. здесь, надеюсь, что вы сочтете это полезным.

Ответ 8

Вы можете использовать защитную стойку. Поднят из статьи на dblock.org:

Добавьте это в свой Gemfile:

group :development do
  gem "guard"
  gem "guard-bundler"
  gem "guard-rack"
end

Затем создайте Guardfile в корне вашего проекта с помощью этого содержимого:

guard 'bundler' do
  watch('Gemfile')
end

guard 'rack' do
  watch('Gemfile.lock')
  watch(%r{^(config|app|api)/.*})
end

Наконец, запустите Guard, так: bundle exec guard и rackup будут перезагружаться каждый раз.

Ответ 9

Если вы изменяете только свои шаблоны, синатра всегда будет перерисовывать их, если вы настроите свою среду на развитие:

ruby app.rb -e development