Відповіді:
Див. Поширені питання про Сінатру ,
"Як зробити так, щоб мій додаток 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перезавантажуватиметься кожного разу.