前回の続きです。
今回はRailsアプリを1ファイルにアーカイブします。
調べた結果、アーカイブするには以下しか見当たりませんでした。

  • Tar2RubyScript

gemでインストールは、"gem install tar2rubyscript"で。使い方は

>tar2rubyscript ディレクトリ名

単体で使う場合はtar2rubyscript.rbの直接起動します。

詳しい手順はこちらこちら(日本語wiki)で紹介してます。この手順をざっくりと追っていきます。
必要なものは以下のようです。

実際に手順を追います。
SQLiteRailsのところは前回に済ませているので省略。で次。
config/environment.rbの一番先頭に以下のmoduleを追記します。
sqliteのdbファイルを絶対パスで取得する為にRails::Configuration#database_configurationをオーバーライドさせる必要があるみたいです。

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

次、Tar2RubyScriptはinit.rbが必要らしいので以下コードのinit.rbをRails_ROOTに配置します。

at_exit do
require "irb"
require "drb/acl"
require "sqlite3"
end
load "script/server" #webrickを使います。

ここまでのディレクトリ構成は以下のようになります。

work/
┣ LocalApp(Rails)/
┃            ┣app/
┃            ┣config/
┃            ┣init.rb
┃            (以下略)
┃
┣ tar2rubyscript.rb
┗ rubyscript2exe.rb

で、次にtar2rubyscript.rbを使ってLoacalAppを1ファイルにまとめます

C:\WORK>ruby tar2rubyscript.rb LoacalApp
tar2rubyscript.rb:623:in `replace': can't modify frozen string (TypeError)
from tar2rubyscript.rb:623
from tar2rubyscript.rb:577:in `newlocation'
from tar2rubyscript.rb:505:in `newlocation'
from tar2rubyscript.rb:472:in `newlocation'
from tar2rubyscript.rb:505:in `newlocation'
from tar2rubyscript.rb:577:in `newlocation'
from tar2rubyscript.rb:621

エラー。どうもrubyのバージョン?かよくわからんが、
tar2rubyscript.rbの623行目あたりの

#$0.replace(File.expand_path("./init.rb"))
$0 = File.expand_path("./init.rb")

に修正します。

C:\WORK>ruby tar2rubyscript.rb LocalApp
Creating archive...
Creating SalaryMan.rb ...

うまく行きました。
カレントディレクトリにLocalApp.rbというrailsアプリのアーカイブファイルLocalApp.rbができています。

ためしにこいつでLocalAppを起動してみます

C:\WORK>ruby LocalApp.rb
LocalApp.rb:605:in `replace': can't modify frozen string (TypeError)
from LocalApp.rb:605
from LocalApp.rb:559:in `newlocation'
from LocalApp.rb:487:in `newlocation'
from LocalApp.rb:454:in `newlocation'
from LocalApp.rb:487:in `newlocation'
from LocalApp.rb:559:in `newlocation'
from LocalApp.rb:603

またしてもreplaceでエラー。こいつもtar2rubyscript.rb
同様に

#$0.replace(File.expand_path("./init.rb"))
$0 = File.expand_path("./init.rb")

します。再度実行。

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-28 04:43:22] INFO  WEBrick 1.3.1
[2009-03-28 04:43:22] INFO  ruby 1.8.6 (2008-08-11) [i386-mswin32]
[2009-03-28 04:43:22] INFO  WEBrick::HTTPServer#start: pid=3376 port=3000

webrickが起動しました。実際に動作確認します。
動いてそう。OK。

このアーカイブファイルをexeに形式にコンバートしてみます。
続きはまた次回。

でも実はtar2rubyscriptで出たエラーは、会社のマシンでは出なかった。かなりrubyのバージョンに依存している?
rubyリファレンス見る限り,1.8以降はARGVの要素はfreezされているみたいだが。。。よくわからん。

Udemy 独学でのアプリ開発に限界を感じたら

プログラミング初学者の皆さんに、 Udemy を強くお勧めしたいと思います。 Udemy は世界中のトップレベルのプログラミング講師が提供するオンライン講座を取り揃えています。以下は、 Udemy で学ぶことのメリットについての詳細です。

1. Udemy の豊富なコースの選択肢

Udemyには、数千ものコースがあります。初心者から上級者まで、プログラミングのあらゆるレベルを網羅しています。また、様々なプログラミング言語やツールに関するコースも多数あり、希望に合わせたコースを選ぶことができます。

2. 実践的な学習方法

Udemyのコースは、理論だけでなく実践的な学習も行えます。多くのコースには、プログラムの作成や実際のプロジェクトに取り組む演習が含まれています。これにより、理論だけでなく実践的なスキルも身につけることができます。

3. Udemy には質の高い講師陣

Udemyの講師陣には、世界中のトップレベルのプログラマーが多数在籍しています。彼らは、実務での経験を活かして、分かりやすい講義を行っています。

4. 初学者が始めるのにとても手頃な価格

Udemyのコースは、他のオンライン講座と比べて手頃な価格で提供されています。また、一度購入すると、終身アクセスが得られるので、自分のペースで学習することができます。

以上の理由から、プログラミング初学者の方には、Udemyが最適な学習プラットフォームであると考えられます。ぜひ一度、Udemyのコースを体験してみてください。


ウェブ開発の人気オンラインコース


ITとソフトウェアの人気オンラインコース


デザインの人気オンラインコース