saya menggunakan
# my_app.rb
load 'index.rb'
dan mulai memutuskan seperti ini
ruby my_app.rb
tetapi tidak pernah memuat ulang perubahan yang saya buat di halaman indeks.
Apakah saya melewatkan sesuatu di sini?
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 yaiturerun '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'
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
danafter_reload
- https://github.com/sinatra/sinatra/pull/1150sumber
require "./my-file"
tanpa hasilrequire
tidak memuat ulang file, jika sudah diperlukan. Andaload
sebagai gantinya.server.rb
, untuk membuatnya memuat ulang file eksternal saya. Itu tidak memeriksa file eksternal saya sendiri, jadi saya harus menyimpan ulangsever.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
Anda bisa menggunakan
rerun
permata itu.ATAU jika Anda menggunakan rackup
sumber
gem instal sinatra-reloader
Anda mungkin ingin mengatur variabel lingkungan untuk pengembangan dan memuat permata secara bersyarat.
sumber
Saat Anda menjalankan aplikasi dengan Passenger Standalone , cukup buat
tmp/always_restart
file:Lihat dokumentasi penumpang untuk info lebih lanjut.
sumber
Saya suka permata Shotgun. Jika Anda menggunakan aplikasi Sinatra modular dan memiliki file config.ru, itu mudah dijalankan.
Lihat permata di sini . Ini cukup mudah dan tidak perlu konfigurasi.
sumber
Di Windows, saya menggunakan permata restart saya untuk ini:
atau, dengan rak:
Lihat di sini untuk info lebih lanjut, semoga bermanfaat.
sumber
Anda bisa menggunakan rak pelindung. Diangkat dari artikel di dblock.org :
Tambahkan ini ke Gemfile Anda:
Kemudian, buat
Guardfile
di root proyek Anda dengan konten ini:Terakhir, jalankan Guard, seperti:,
bundle exec guard
danrackup
akan dimuat ulang setiap saat.sumber
Jika Anda hanya mengubah template, sinatra akan selalu merendernya jika Anda mengatur lingkungan Anda untuk pengembangan:
sumber