Как заставить Синатру автоматически перезагружать файл после каждого изменения? - PullRequest
113 голосов
/ 08 августа 2009

Я использую

# my_app.rb
load 'index.rb'

и запустить сервер вот так

ruby my_app.rb

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

Ответы [ 9 ]

194 голосов
/ 08 августа 2009

См. Sinatra FAQ ,

«Как сделать так, чтобы мое приложение Sinatra перезагрузилось после изменений?»

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

Именно поэтому мы рекомендуем вам выполнить внепроцессную перезагрузку.

Сначала вам нужно установить перезапустить , если вы еще этого не сделали:

 $ gem install rerun

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

$ ruby app.rb

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

$ rerun 'ruby app.rb'

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

$ rerun 'rackup'

Вы поняли.

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

42 голосов
/ 20 октября 2010

gem install sinatra-reloader

require 'sinatra'
require 'sinatra/reloader'

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

11 голосов
/ 24 января 2013

Вы можете использовать камень rerun.

gem install rerun
rerun 'ruby app.rb' 

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

rerun 'rackup'
7 голосов
/ 09 сентября 2011

gem install sinatra-reloader

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

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

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

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

6 голосов
/ 18 ноября 2011

Когда вы запускаете приложение с Passenger Standalone , просто создайте файл tmp/always_restart:

$ touch tmp/always_restart.txt

Для получения дополнительной информации см. Пассажир Документация .

5 голосов
/ 01 октября 2014

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

shotgun config.ru

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

4 голосов
/ 23 сентября 2014

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

restart ruby my_app.rb

или со стойкой:

restart rackup

См. здесь для получения дополнительной информации, надеюсь, вы найдете это полезным.

1 голос
/ 24 апреля 2014

Вы можете использовать стеллаж. Поднято из статьи на 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 будет перезагружаться каждый раз.

0 голосов
/ 14 октября 2017

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

ruby app.rb -e development
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...