Câu trả lời:
Xem Câu hỏi thường gặp về Sinatra ,
"Làm cách nào để tải lại ứng dụng Sinatra khi có các thay đổi?"
Trước hết, việc tải lại mã trong quá trình trong Ruby là rất khó và việc có một giải pháp phù hợp với mọi tình huống là không thể về mặt kỹ thuật.
Đó là lý do tại sao chúng tôi khuyên bạn nên thực hiện tải lại ngoài quy trình.
Trước tiên, bạn cần cài đặt chạy lại nếu chưa:
$ gem install rerun
Bây giờ nếu bạn khởi động ứng dụng Sinatra của mình như thế này:
$ ruby app.rb
Thay vào đó, tất cả những gì bạn phải làm để tải lại là:
$ rerun 'ruby app.rb'
Nếu bạn đang sử dụng rackup chẳng hạn, hãy làm như sau:
$ chạy lại 'rackup'
Bạn có được ý tưởng.
Nếu bạn vẫn muốn tải lại trong quá trình, hãy kiểm tra
Sinatra::Reloader
.
rerun
. Bạn không bị giới hạn với các tùy chọn mặc định tức là rerun 'rackup'
. Có thể chạy bất kỳ máy chủ nào trên bất kỳ cổng nào. Dưới đây là ví dụ làm thế nào để chạy Puma trên cổng số 5678 -rerun 'rackup -s puma -p 5678 app/sinatra/config.ru'
gem install sinatra-reloader
require 'sinatra'
require 'sinatra/reloader'
Lưu ý : nó sẽ chỉ tải lại các trình xử lý sinatra (và, có thể là một số lệnh cấu hình máy chủ sinatra), chứ không phải các tệp tùy chỉnh mà bạn phải tải lại theo cách thủ công.
UPD sau 9 năm: có vẻ như nó đã có thể tải lại file khác sử dụng also_reload
, dont_reload
và after_reload
- https://github.com/sinatra/sinatra/pull/1150
require "./my-file"
nhưng không thành công
require
không tải lại tệp nếu nó đã được yêu cầu. Bạn load
thay thế.
server.rb
, tuy nhiên, để có được nó để tải lại tập tin bên ngoài của tôi. Nó không kiểm tra tệp bên ngoài của tôi một mình, vì vậy tôi phải lưu lại sever.rb
mỗi khi tôi thực hiện thay đổi đối với tệp bên ngoài của mình. shotgun dường như hoạt động tốt hơn về mặt này, nhưng nó cũng có vẻ như tải lại các phiên cơ sở dữ liệu.
configure :development do |c| require 'sinatra/reloader' c.also_reload "./lib/*.rb" c.also_reload "./controllers/*.rb" c.also_reload "./init/*.rb" end
Khi bạn chạy ứng dụng với Passenger Standalone , chỉ cần tạo một tmp/always_restart
tệp:
$ touch tmp/always_restart.txt
Xem tài liệu Hành khách để biết thêm thông tin.
Tôi thích đá quý Shotgun. Nếu bạn đang sử dụng một ứng dụng Sinatra mô-đun và có tệp config.ru, bạn có thể dễ dàng chạy.
shotgun config.ru
Kiểm tra đá quý tại đây . Nó khá đơn giản và không cần cấu hình.
Trên Windows, tôi đang sử dụng đá quý khởi động lại của mình cho việc này:
restart ruby my_app.rb
hoặc, với rackup:
restart rackup
Xem ở đây để biết thêm thông tin, hy vọng bạn thấy nó hữu ích.
Bạn có thể sử dụng giá đỡ. Lấy từ một bài báo tại dblock.org :
Thêm cái này vào Gemfile của bạn:
group :development do
gem "guard"
gem "guard-bundler"
gem "guard-rack"
end
Sau đó, tạo Guardfile
ở gốc dự án của bạn với nội dung sau:
guard 'bundler' do
watch('Gemfile')
end
guard 'rack' do
watch('Gemfile.lock')
watch(%r{^(config|app|api)/.*})
end
Cuối cùng, hãy chạy Guard, như sau :, bundle exec guard
và rackup
sẽ tải lại mọi lúc.