Відповіді:
Див. Поширені питання про Сінатру ,
"Як зробити так, щоб мій додаток Sinatra перезавантажив зміни?"
По-перше, перезавантаження коду під час роботи в Ruby є важким, а рішення, яке працює для кожного сценарію, технічно неможливо.
Ось чому ми рекомендуємо вам робити поза-перезавантаження.
Спочатку потрібно встановити перезапуск, якщо ви ще цього не зробили:
$ gem install rerun
Тепер якщо ви запускаєте додаток Сінатра так:
$ ruby app.rb
Все, що вам потрібно зробити для перезавантаження, це зробити це:
$ rerun 'ruby app.rb'
Якщо ви, наприклад, використовуєте rackup, замість цього виконайте такі дії:
$ rerun 'стійка'
Ви отримуєте ідею.
Якщо ви все ще хочете в процесі перезавантаження, перевірте
Sinatra::Reloader
.
rerun
. Ви не обмежені опціями за замовчуванням, тобто rerun 'rackup'
. Можна запустити будь-який сервер на будь-якому порту. Ось приклад, як запустити Puma на номер порту 5678 -rerun 'rackup -s puma -p 5678 app/sinatra/config.ru'
gem встановити sinatra-reloader
require 'sinatra'
require 'sinatra/reloader'
Примітка : він буде завантажувати лише обробники 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
Коли ви запускаєте програму з автономним пасажиром , просто створіть tmp/always_restart
файл:
$ touch tmp/always_restart.txt
Додаткову інформацію див. У документації для пасажирів .
Мені подобається дорогоцінний камінь Shotgun. Якщо ви використовуєте модульний додаток Sinatra і маєте файл config.ru, його легко запустити.
shotgun config.ru
Ознайомтеся з дорогоцінним каменем тут . Він досить прямий вперед і не потрібна конфігурація.
Для Windows я використовую для цього свій дорогоцінний камінь :
restart ruby my_app.rb
або, за допомогою стійки:
restart rackup
Дивіться тут для отримання додаткової інформації, сподіваємось, вам здається корисною.
Ви можете використовувати охоронну стійку. Піднято зі статті на 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
перезавантажуватиметься кожного разу.