Sinatra가 각 변경 후 파일을 자동으로 다시로드하도록하는 방법은 무엇입니까?


118

나는 사용하고있다

# my_app.rb
load 'index.rb'

이렇게 서버를 시작하십시오

ruby my_app.rb

하지만 인덱스 페이지에서 변경 한 내용을 다시로드하지 않습니다.
내가 여기서 놓친 것이 있습니까?

답변:


203

참고 항목 시나 FAQ를 ,

"변경시 Sinatra 앱을 다시로드하려면 어떻게해야합니까?"

우선 Ruby에서 프로세스 내 코드를 다시로드하는 것은 어렵고 모든 시나리오에서 작동하는 솔루션을 갖는 것은 기술적으로 불가능합니다.

그렇기 때문에 out-of-process 다시로드를 수행하는 것이 좋습니다.

아직 설치 하지 않은 경우 먼저 재실행 을 설치해야합니다 .

 $ gem install rerun

이제 다음과 같이 Sinatra 앱을 시작하면 :

$ ruby app.rb

다시로드하려면 다음과 같이하면됩니다.

$ rerun 'ruby app.rb'

예를 들어 랙업을 사용하는 경우 대신 다음을 수행하십시오.

$ 재실행 'rackup'

당신은 아이디어를 얻습니다.

여전히 진행중인 재로드를 원하면을 확인하십시오 Sinatra::Reloader.


shotgun에는 최소한의 config.ru가 필요합니다. 아직없는 경우 생성하고 "require './my_app'"(my_app.rb는 루비 앱임)을 입력하면 설정됩니다.
Jeffrey Martinez

에 대한 작은 추가 rerun. 기본 옵션으로 제한되지 않습니다 rerun 'rackup'. 모든 포트에서 모든 서버를 실행할 수 있습니다. 다음은 포트 번호 5678에서 Puma를 실행하는 방법의 예입니다. –rerun 'rackup -s puma -p 5678 app/sinatra/config.ru'
sashaegorov

43

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


안녕하세요 @Nakilon, 이러한 파일을 수동으로 다시로드하려면 어떻게해야합니까? 나는 require "./my-file"성공하지 않고 하고 있습니다
kristianlm 2011 년

@kristianlm require은 이미 필요한 경우 파일을 다시로드하지 않습니다. load대신 당신 .
Nakilon

당신이 옳습니다. server.rb그래도 외부 파일을 다시로드 하려면을 다시 저장 해야합니다. 외부 파일 만 확인하지 않기 때문에 sever.rb외부 파일을 변경할 때마다 다시 저장해야 합니다. Shotgun 은 이와 관련하여 더 잘 작동하는 것 같지만 데이터베이스 세션을 다시로드하는 것 같습니다.
kristianlm 2011 년

9
also_reload 메서드를 사용하여 다시로드 할 파일을 지정합니다.configure :development do |c| require 'sinatra/reloader' c.also_reload "./lib/*.rb" c.also_reload "./controllers/*.rb" c.also_reload "./init/*.rb" end
Opptatt Jobber

12

rerun보석을 사용할 수 있습니다 .

gem install rerun
rerun 'ruby app.rb' 

또는 랙업을 사용하는 경우

rerun 'rackup'

8

gem install sinatra-reloader

require 'sinatra/base'
require "sinatra/reloader"

class MyApp < Sinatra::Base
  register Sinatra::Reloader

  get '/' do
    "Hello Testing1!"
  end
end

환경 변수를 개발로 설정하고 gem을 조건부로로드 할 수 있습니다.



5

나는 Shotgun 보석을 좋아합니다. 모듈 식 Sinatra 앱을 사용 중이고 config.ru 파일이 있으면 실행하기 쉽습니다.

shotgun config.ru

여기 에서 보석을 확인 하십시오 . 매우 간단하고 구성이 필요하지 않습니다.


4

Windows에서는 이를 위해 재시작 gem 을 사용하고 있습니다.

restart ruby my_app.rb

또는 랙업 포함 :

restart rackup

자세한 정보는 여기 를 참조 하십시오 . 유용하다고 생각하시면됩니다.


문서에 윈도우에서 작동하지 않는다고 나와 있습니다. 시도했는데 sinatra를로드했지만 chenges에서 다시로드하지 않습니다
peter

1

경비대를 사용할 수 있습니다. 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때마다 다시로드됩니다.


0

템플릿 만 변경하면 sinatra는 환경을 개발로 설정하면 항상 다시 렌더링합니다.

ruby app.rb -e development
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.