その1〜その3までを踏まえてまとめてみます。
まず環境
- windowsXP SP3
- ruby 1.8.5
- ruby1.8.6系はtar2rubyscript、rubyscript2exeがうまく動作しない
- rails 2.3.2
- sqlite3-1.2.3
- sqlite3-1.2.4はwindowsには対応してないらしい
- Tar2RubyScript.rb
- RubyScript2exe
Contents
sqlite3ライブラリのインストール
C:\WORK>gem install sqlite3-ruby -v 1.2.3
sqlite3-ruby 1.2.4はエラーが出るかも。
railsアプリの作成
ここはさくっと。
C:\WORK>rails LocalApp
スケルトンを作成
C:\WORK>cd LocalApp C:\WORK\LocalApp>ruby script/generate scaffold user name:string birthday:date created_at:datetime updated_at:datetime
maigrationする
C:\WORK\LocalApp>rake db:migrate
動作確認
C:\WORK\LocalApp>ruby script/server
ブラウザで確認OK
外部ライブラリのインストール
アーカイブを作るタメのtar2rubyscriptをインストール。gemでインストールは
>gem install tar2rubyscript
EXEを作るタメのrubyscript2exeをインストール。gemでインストールは
>gem install rubyscript2exe
railsに手を加える
exe化したときにDBは外出しにして扱いたいので以下の記述をRAILS_ROOT/config/environment.rbの先頭に追加
module Rails class Configuration def database_configuration conf = YAML::load(ERB.new(IO.read(database_configuration_file)).result) if defined?(TAR2RUBYSCRIPT) conf.each do |k, v| if v["adapter"] =~ /^sqlite/ v["database"] = oldlocation(v["database"]) if v.include?("database") v["dbfile"] = oldlocation(v["dbfile"]) if v.include?("dbfile") end end end conf end end end
DBを外出しするためdatabase.ymlのdatabaseパスを変更する。
# SQLite version 3.x # gem install sqlite3-ruby (not necessary on OS X Leopard) development: adapter: sqlite3 #database: db/development.sqlite3 database: development.sqlite3 pool: 5 timeout: 5000 #(以下略)
init.rbの作成
exeを実行したときの初期化スクリプトです。
init.rbの名前でRAILS_ROOT直下に配置する。
at_exit do require "irb" require "drb/acl" require "sqlite3" end load "script/server" #webrickを使います。
railsアプリをアーカイブ
C:\WORK>tar2rubyscript LocalApp Creating archive... Creating LocalApp.rb ...
LocalApp.rbができる。DBをRAILS_ROOT/db/development.sqlite3をカレントにコピーして
ので実行して動作確認
C:\WORK>ruby LocalApp.rb => Booting WEBrick => Rails 2.3.2 application starting on http://0.0.0.0:3000 => Call with -d to detach => Ctrl-C to shutdown server [2009-03-29 17:17:52] INFO WEBrick 1.3.1 [2009-03-29 17:17:52] INFO ruby 1.8.5 (2007-06-07) [i386-mswin32] [2009-03-29 17:17:52] INFO WEBrick::HTTPServer#start: pid=128 port=3000
ブラウザで動作確認OK。
アーカイブをEXEにする!
LocalApp.rbをexeにします。
C:\WORK>rubyscript2exe LocalApp.rb Tracing LocalApp ... => Booting WEBrick => Rails 2.3.2 application starting on http://0.0.0.0:3000 => Call with -d to detach => Ctrl-C to shutdown server [2009-03-29 17:23:39] INFO WEBrick 1.3.1 [2009-03-29 17:23:39] INFO ruby 1.8.5 (2007-06-07) [i386-mswin32] [2009-03-29 17:23:39] INFO WEBrick::HTTPServer#start: pid=912 port=3000 [2009-03-29 17:23:45] INFO going to shutdown ... [2009-03-29 17:23:45] INFO WEBrick::HTTPServer#start done. Exiting Gathering files... Copying files... Creating LocalApp.exe ...
途中init.rbが読み込まれるのでwibrickが起動します。Ctrl-Cで止めて、処理を続行させる。
で、LocalApp.exe完成。
最終的には以下のような構成になった。
work/ ┣ LocalApp(Rails)/ ┃ ┣app/ ┃ ┣config/ ┃ ┣init.rb ┃ (以下略) ┃ ┣ dvelopment.sqlite3 ┣ LocalApp.rb ┗ LocalApp.exe
でLocalApp.exeをダブルクリックで起動してみるとwebrickが起動します。ブラウザで動作確認OK。
ちなみに、ログはというと、WindowsユーザのLocal Settings\Tmep\にアーカイブが展開されて保存される。
後は、exeファイルとDBファイルをセットで配布すれば、
rubyがインストールされていないwindowsマシンでもrailsが動作します。