Jawaban:
Lihat FAQ Sinatra ,
"Bagaimana cara membuat aplikasi Sinatra saya memuat ulang saat ada perubahan?"
Pertama, pemuatan ulang kode dalam proses di Ruby itu sulit dan memiliki solusi yang berfungsi untuk setiap skenario secara teknis tidak mungkin.
Itulah mengapa kami menyarankan Anda untuk melakukan pemuatan ulang di luar proses.
Pertama, Anda perlu menginstal ulang jika Anda belum melakukannya:
$ gem install rerun
Sekarang jika Anda memulai aplikasi Sinatra Anda seperti ini:
$ ruby app.rb
Yang harus Anda lakukan untuk memuat ulang adalah melakukan ini:
$ rerun 'ruby app.rb'
Jika Anda misalnya menggunakan rackup, lakukan hal berikut:
$ jalankan kembali 'rackup'
Anda mengerti.
Jika Anda masih ingin memuat ulang dalam proses, lihat
Sinatra::Reloader
.
rerun
. Anda tidak dibatasi dengan opsi default yaitu rerun 'rackup'
. Dimungkinkan untuk menjalankan server apa pun di port apa pun. Berikut adalah contoh cara menjalankan Puma pada nomor port 5678 -rerun 'rackup -s puma -p 5678 app/sinatra/config.ru'
gem instal sinatra-reloader
require 'sinatra'
require 'sinatra/reloader'
Catatan : ini hanya akan memuat ulang penangan sinatra (dan, mungkin beberapa perintah konfigurasi server sinatra), tetapi bukan file khusus, yang harus Anda muat ulang secara manual.
UPD setelah 9 tahun: sepertinya sudah memungkinkan untuk memuat ulang file lain menggunakan also_reload
, dont_reload
dan after_reload
- https://github.com/sinatra/sinatra/pull/1150
require "./my-file"
tanpa hasil
require
tidak memuat ulang file, jika sudah diperlukan. Anda load
sebagai gantinya.
server.rb
, untuk membuatnya memuat ulang file eksternal saya. Itu tidak memeriksa file eksternal saya sendiri, jadi saya harus menyimpan ulang sever.rb
setiap kali saya membuat perubahan pada file eksternal saya. shotgun tampaknya bekerja lebih baik dalam hal ini, tetapi tampaknya juga memuat ulang sesi database.
configure :development do |c| require 'sinatra/reloader' c.also_reload "./lib/*.rb" c.also_reload "./controllers/*.rb" c.also_reload "./init/*.rb" end
Saat Anda menjalankan aplikasi dengan Passenger Standalone , cukup buat tmp/always_restart
file:
$ touch tmp/always_restart.txt
Lihat dokumentasi penumpang untuk info lebih lanjut.
Saya suka permata Shotgun. Jika Anda menggunakan aplikasi Sinatra modular dan memiliki file config.ru, itu mudah dijalankan.
shotgun config.ru
Lihat permata di sini . Ini cukup mudah dan tidak perlu konfigurasi.
Di Windows, saya menggunakan permata restart saya untuk ini:
restart ruby my_app.rb
atau, dengan rak:
restart rackup
Lihat di sini untuk info lebih lanjut, semoga bermanfaat.
Anda bisa menggunakan rak pelindung. Diangkat dari artikel di dblock.org :
Tambahkan ini ke Gemfile Anda:
group :development do
gem "guard"
gem "guard-bundler"
gem "guard-rack"
end
Kemudian, buat Guardfile
di root proyek Anda dengan konten ini:
guard 'bundler' do
watch('Gemfile')
end
guard 'rack' do
watch('Gemfile.lock')
watch(%r{^(config|app|api)/.*})
end
Terakhir, jalankan Guard, seperti:, bundle exec guard
dan rackup
akan dimuat ulang setiap saat.