回答:
Sinatra FAQを参照してください。
「変更時にSinatraアプリをリロードするにはどうすればよいですか?」
まず、Rubyでのインプロセスコードのリロードは困難であり、あらゆるシナリオで機能するソリューションを持つことは技術的に不可能です。
そのため、アウトプロセスの再読み込みを行うことをお勧めします。
まだ実行していない場合は、最初にrerunをインストールする必要があります。
$ gem install rerun
次のようにSinatraアプリを起動すると:
$ ruby app.rb
リロードのためにあなたがしなければならないすべては代わりにこれをすることです:
$ rerun 'ruby app.rb'
たとえば、ラックアップを使用している場合は、代わりに次のようにします。
$ 'rackup'を再実行します
あなたはアイデアを得ます。
それでもインプロセスの再読み込みが必要な場合は、をチェックしてください
Sinatra::Reloader
。
rerun
。デフォルトのオプション、つまりに制限されませんrerun 'rackup'
。任意のポートで任意のサーバーを実行することが可能です。ここでは、ポート番号5678でプーマを実行する方法の例です-rerun 'rackup -s puma -p 5678 app/sinatra/config.ru'
gem install sinatra-reloader
require 'sinatra'
require 'sinatra/reloader'
注:sinatraハンドラー(およびおそらく一部のsinatraサーバー構成コマンド)のみが再ロードされますが、カスタムファイルは再ロードされないため、手動で再ロードする必要があります。
9年後UPD:使用して他のファイルを再読み込みすることは既に可能であるように思えるalso_reload
、dont_reload
とafter_reload
- https://github.com/sinatra/sinatra/pull/1150
require "./my-file"
成功せずにやっています
require
ファイルがすでに必要な場合、ファイルを再ロードしません。あなたload
の代わりに。
server.rb
ただし、外部ファイルをリロードするには、を再保存する必要があります。外部ファイルだけをチェックするわけではないのでsever.rb
、外部ファイルに変更を加えるたびに再保存する必要があります。この点では、shotgunの方がうまく機能しているようですが、データベースセッションを再ロードするようにも見えます。
configure :development do |c| require 'sinatra/reloader' c.also_reload "./lib/*.rb" c.also_reload "./controllers/*.rb" c.also_reload "./init/*.rb" end
Passenger Standaloneでアプリケーションを実行するときは、tmp/always_restart
ファイルを作成するだけです。
$ touch tmp/always_restart.txt
詳細については、乗客のドキュメントを参照してください。
ガードラックを使用できます。持ち上げ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
毎回リロードします。