답변:
참고 항목 시나 FAQ를 ,
"변경시 Sinatra 앱을 다시로드하려면 어떻게해야합니까?"
우선 Ruby에서 프로세스 내 코드를 다시로드하는 것은 어렵고 모든 시나리오에서 작동하는 솔루션을 갖는 것은 기술적으로 불가능합니다.
그렇기 때문에 out-of-process 다시로드를 수행하는 것이 좋습니다.
아직 설치 하지 않은 경우 먼저 재실행 을 설치해야합니다 .
$ gem install rerun
이제 다음과 같이 Sinatra 앱을 시작하면 :
$ ruby app.rb
다시로드하려면 다음과 같이하면됩니다.
$ rerun 'ruby app.rb'
예를 들어 랙업을 사용하는 경우 대신 다음을 수행하십시오.
$ 재실행 'rackup'
당신은 아이디어를 얻습니다.
여전히 진행중인 재로드를 원하면을 확인하십시오
Sinatra::Reloader
.
rerun
. 기본 옵션으로 제한되지 않습니다 rerun 'rackup'
. 모든 포트에서 모든 서버를 실행할 수 있습니다. 다음은 포트 번호 5678에서 Puma를 실행하는 방법의 예입니다. –rerun 'rackup -s puma -p 5678 app/sinatra/config.ru'
gem install sinatra-reloader
require 'sinatra'
require 'sinatra/reloader'
참고 : 수동으로 다시로드해야하는 사용자 정의 파일이 아닌 sinatra 핸들러 (및 일부 sinatra 서버 구성 명령) 만 다시로드합니다.
구년 후 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
마지막으로,과 같이, 가드를 실행 bundle exec guard
하고, rackup
때마다 다시로드됩니다.