sinatraフレームワークでデプロイ環境を切り替えるのに悩むsinatraを一から勉強し直している。Railといったフレームワークをちゃんと使ったことがないから、理解していないことが多すぎる。いうことで、sinatraの基本的な使い方として、以下をまず始めに学ぶことにした。reloadは、ソースコードを変更したとき、アプリケーションサーバを起動し直さなくても、自動的に再読み込みをしてくれるので、try&errorをするときの作業効率が全く違う。早めにマスターしておきたい。deploy環境の指定ができるようになると、プログラム中で環境に応じた処理を分岐させることができる。開発環境では、reloaderを有効にするが、本番環境では無効にするとか、開発環境の場合にdebug用の出力を出す、とかを簡単に切り替えられて楽になる。sinatraでのdeploy環境は、以下の3つから選択することとなる。開発環境:developmentテスト環境:test本番環境:production環境を指定するには、コードの最初の方で以下のように宣言しておく。:production環境の指定は、rubyを実行する時の-eオプションで指定することもできる。production使い方は、それ以降でdevelop?もしくはproduction?メドッドで判別し、trueかfalseが返るので、それで条件分岐させる。development?このdevelopment?やproduction?やtest?というメッソッドは、sinatra/base.rbの中で以下のように定義されている。endさて、このenvironment変数に入っている環境指定のシンボルをどうやって参照するかも試した。マニュアルによれば、settings.environmentで取れるはずだ。settings.environmentで得た結果と、production?で得た結果が異なるのである。以下のようなコードでは。endendApp.run!出力はこうなる。endendApp.run!このようになる。development?=trueこの違いがわからないまま、今に至る訳である。class定義の外でsetしたものはクラス変数に入り、内側でsetしたものはインスタンス変数に入るのだろうか。settingsはインスタンス変数を見ているが、?メソッドはクラス変数を見ていると考えれば、合点はいくが、なぜそんなふうになっているのかは謎。実用上は、production?メドッドで分岐させることが多いはずなので、classの外側で定義しておけば問題ない。ruby起動時の-eオプションで指定した場合も、前者(classの外側で定義)と同じ動きをする。内側で定義した:environmentで判断されるようだ。外側で定義した:environmentの値を、内側の:environmentに代入するような仕組みにすればいいかと思ったが、どうもそれもうまく動かない。結局、rubyの思想に反するが、両方で定義しておくのが安定しそうだ。ちなみに、reloaderの読み込みは、上記コード内のconfigureブロックの中で書いてあるとおり。(19)タグクラウド10.04264adeskbaraliasALIGNAPIappengineappleキーボードATOKbashCASEchainconqueconsumerdigdnssecDynamicElementEmacsEvernoteevervimexifGAEGalaxygithubGoogleimageiOSiOS5iPadiPhoneiPhone4iphoneスタンドjavascriptLeftMacOSnoteoauthofOSOSXPadfonepythonretinaRightrmagickRubySHELLsigchasesinatrasmbmountSTYLEtableTDTDLToTRTrusttwitterUbuntuupdateurischemeVAPORVimWindowsXxwindowかな遊びひらがなみらい科学館やはぶさアオシマキーボードクリップクロックスゴムバンドショートカットスキーマテキストエディタディレクトリ共有プラモプラモデルワッフル三段ベッド。