鳥小屋.txt

主に自作ゲームをつくったりしているよ。制作に関することやそうじゃないことのごった煮ブログ

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

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

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

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

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

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

Gemで「sinatra-auto-reloadsinatra-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

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