'Ruby'에 해당되는 글 3건

  1. 2016.01.12 [Sinatra] 소스가 변경되면 자동으로 반영되도록 하기
  2. 2016.01.04 [Ruby] autoload
  3. 2015.12.30 [Ruby] at_exit

기본적으로 템플릿 파일들은 변경하여도 서버 재시작 없이 적용이 되지만,
rb 파일을 변경하였을 경우에는 서버 재시작을 해야 반영이 된다.

Sinatra에서 제공하는 해결책은 rerun gem을 이용하는것인데 
(http://www.sinatrarb.com/faq.html)
(https://github.com/alexch/rerun)

이는 윈도우 환경에서 정상적으로 동작하지 않는다.

C:/Ruby22/lib/ruby/gems/2.2.0/gems/rerun-0.11.0/lib/rerun/runner.rb:152:in `fork': fork() function is unimplemented on this machine (NotImplementedError)

        from C:/Ruby22/lib/ruby/gems/2.2.0/gems/rerun0.11.0/lib/rerun/runner.rb:152:in `start'

        from C:/Ruby22/lib/ruby/gems/2.2.0/gems/rerun0.11.0/lib/rerun/runner.rb:9:in `keep_running'

        from C:/Ruby22/lib/ruby/gems/2.2.0/gems/rerun-0.11.0/bin/rerun:12:in `<top (required)>'

        from C:/Ruby22/bin/rerun:23:in `load'

        from C:/Ruby22/bin/rerun:23:in `<main>'


맥 또는 리눅스 환경에서는 rerun을 이용하여 해결할 수 있겠지만, 윈도우에서는 다른 방법을 사용해야 한다.


gem install sinatra-reloader


require 'sinatra'
require 'sinatra/reloader'


require 쪽에 적어주기만 하면 알아서 적용되고, rb 파일을 변경해서 다시 요청을 시도해보면 정상적으로 리로드가 되는걸 확인 가능하다.


Posted by pjc0247
TAG Ruby, sinatra

[Ruby] autoload

Ruby 2016.01.04 13:47
http://ruby-doc.org/core-2.1.0/Module.html#method-i-autoload

autoload는 클래스가 사용되는 시점에 해당 클래스가 포함된 rb 파일을 lazy 하게 로드할 수 있도록 하는 기능을 제공합니다.


  
  


autoload? 메소드를 사용하면, 특정 클래스에 대해 autoload 가 지정된 파일 경로를 가져올 수도 있습니다.


Posted by pjc0247
TAG Ruby

[Ruby] at_exit

Ruby 2015.12.30 11:04
루비 Sinatra 의 간단한 예제 코드는 아래와 같습니다.

위의 코드를 실행하면 바로 웹 서버가 실행되는데, 이 동작은 약간 이상합니다.


분명히 라우팅만 지정했을 뿐이고, 서버를 실행하는 코드는 아무데도 없습니다. 파일의 끝이 나와서 프로그램이 꺼져야 하는데, 꺼지지 않고 계속 서버가 실행됩니다.


이는 at_exit를 이용한 트릭이며, 사용자가 직접 서버를 켜는 코드를 작성하지 않아도 되도록 도와줍니다. 

at_exit는 앱이 종료될 때 실행되는 콜백을 지정하는 함수입니다. 단순히 블록 하나만 넘겨주면 되며, 사용법은 아래와 같습니다.


at_exit를 여러번 실행하면, 콜백이 교체되는것이 아니라 '추가'됩니다. 아래의 코드는 RunServer를 3번 실행시킵니다.


위에서 말했듯이 Sinatra는 이 방법을 이용한 트릭을 사용합니다. 'get' 등을 호출하면 어딘가에 정보를 저장하고 있다가, at_exit에서 서버를 실행하는 것 입니다.


Posted by pjc0247
TAG Ruby, sinatra