読者です 読者をやめる 読者になる 読者になる

鳥小屋.txt

ゲーム作ったり、Web的なことしたり、ぐだぐだしたりしますねヽ(・x・)ノ

Sinatra::Baseの子クラスでリロード

Ruby Sinatra

2011/09/03 インストールするの間違えてたので修正.
別のPCで試して気付いた><

こんにちは,今日もいいSinatraですね!(?)

そんなこんなでSinatraさんなんですが,
いちいちスクリプトを編集するたびに,
サーバを再起動しなくてはいけないので面倒です><

いや,さすがにこれはないだろうということで,
自動的にリロードする方法を調べてやってみてたんですが,
よくわからなくて悩みまくったので覚え書き.

ちなみに環境はWindows 7Ruby 1.9.2です.

Gemで「sinatra-auto-reload sinatra-reloader」をインストールする

gem install sinatra-reloader

(※違うのインストールしてたので修正)
こいつが自動的にリロードしてくれる優れもの!
前回いっしょにインストールすればよかったね

リロードに関する処理を付け足す

# -*- coding: utf-8 -*-
# app.rb
require 'sinatra/base'

class MyApp < Sinatra::Base
  # 開発モードのときリロード機構をONにする
  if development?
    require 'sinatra/reloader'
    register Sinatra::Reloader
  end

  # テスト用
  get '/' do
    'test'
  end
end

「register Sinatra::Reloader」がポイント!
というか僕が付けてなくて動かないよー><となってた場所.
ところで,registっていう英単語はないそうですね(

# -*- coding: utf-8 -*-
# config.ru
require File.dirname( __FILE__ ) + '/app.rb'
MyApp.run! :host => 'localhost', :port => 4567

こっちは前回とほぼ同じ.
いつもは同じ階層にあるやつを「require './〜'」で
読み込んでたんですが,なんかあんまよくないっぽい?
というか,他の人はみんなFile.dirname( __FILE__ )使ってたので
そっちにしてみました.

サーバを起動

ruby config.ru

前回同様,config.ruを実行してサーバを起動.
http://127.0.0.1:4567/にアクセスすると「test」と表示されるはず

ちゃんとリロードできるかチェック

  # テスト用
  get '/' do
    'みょん'
  end

テケトーに編集して,サーバを再起動しないでアクセスすると……
これでバッチリですね!