作成日:2012/09/08
Ruby on Railsは、インストールの際のコマンド群が、インターネットに接続していることを前提とした作りになっている。しかし諸事情からインターネットに通信できないサーバ上に、手でパッケージファイルを一つ一つコピーしてrails環境を構築してみた。この際、いろいろハマったのでそのメモ。
しかし最初に言っておくが、苦労ばっかり多くて得るものが無いため、仕様・要件としてインターネットに接続できない組織内サーバなどの場合は、「rails環境を諦める」のが最善の策である。と思った。
以下の環境・バージョンでインストールを行う。
Linux | CentOS 5.5 (64bit) |
---|---|
Ruby | 1.9.3 |
通常、gemコマンドはインターネットからパッケージを拾ってこようとするため、ローカルにあるファイルでインストールするときはオプション --local を付ける。この際、パッケージの拡張子やバージョン番号は省略できる。
# gem install rails-3.2.8.rc1.gem --local もしくは # gem install rails --local
パッケージを手で拾ってくるときはhttp://rubygems.org/からダウンロードするため、このサイトの作りを知っておくと良い。
/gems/(パッケージ名) で、そのパッケージのトップページに行ける。例えばrakeなら、http://rubygems.org/gems/rakeとなる。
パッケージのトップページから、[Download]ボタンで最新版がダウンロードできる(当たり前)。
パッケージのトップページで一番下の「Show all versions」をクリックするか、あるいはURLの次に/versions/を付けると、過去のファイルがダウンロードできる。rakeの例なら、http://rubygems.org/gems/rake/versions。
また、.gemファイルは実はzipファイルなので、中味を覗いてみたければ拡張子を.zipに変えて展開してみれば良い。
rails本体を、GitHubのhttps://github.com/rails/railsからダウンロードする。下図参照。
[branch]から最新版を選び(私が試した時は3-2-STABLEだった)、その上の雲のアイコン[ZIP]をクリックしてZIPファイルをダウンロード。
railsのzipを展開すると、中に[activesupport] [actionpack] などサブディレクトリがある。これら付属のモジュールを先に入れないと本体が入らないため、まずこれらのサブモジュールをインストールする。gemコマンドでインストールしようとすると、足りないgemが分かるため、それを一つ一つ手で拾ってきて入れる……という流れになる。
例えばactivesupportは、ディレクトリ内に入ってインストールしようとすると足りないモジュールが分かる。
# gem install activesupport --local ERROR: While executing gem ... (Gem::DependencyError) Unable to resolve dependencies: activesupport requires i18n (~> 0.6), multi_json (~> 1.0)
どうやらi18nとmulti_jsonを入れないとダメなようだ。ということは、http://rubygems.org/gems/i18nとhttp://rubygems.org/gems/multi_jsonを入れよう。という流れ。
で、結局、入れないといけなかったパッケージは以下のものだった。
http://rubygems.org/gems/builder http://rubygems.org/gems/rack-cache http://rubygems.org/gems/rack http://rubygems.org/gems/rack-test http://rubygems.org/gems/journey http://rubygems.org/gems/sprockets http://rubygems.org/gems/erubis http://rubygems.org/gems/bundler http://rubygems.org/gems/hike http://rubygems.org/gems/tilt http://rubygems.org/gems/mail http://rubygems.org/gems/mime-types http://rubygems.org/gems/polyglot http://rubygems.org/gems/arel http://rubygems.org/gems/rack-ssl http://rubygems.org/gems/thor http://rubygems.org/gems/tzinfo http://rubygems.org/gems/arel http://rubygems.org/gems/treetop http://rubygems.org/gems/sprockets
gemコマンドで依存表示された時、バージョン表記でハマることがあるので書いておく。
# gem install actionpack --local ERROR: While executing gem ... (Gem::DependencyError) Unable to resolve dependencies: actionpack requires sprockets (~> 2.1.3)
このように出た場合、~> 2.1.3 という表記は、「2.1.3以上、2.2未満」を表す。つまりバージョン2.1.xならいいけど、2.2.1とかはダメ。なので、敢えて古いバージョンを入れないといけないことがあるので注意。私が試したときは、sprocketsだけこの罠があり、ハマった。
依存するgemパッケージを入れたら、[activesupport] [actionpack] などサブモジュールをgem install xxxxx --localでインストールする。付属モジュールが全てインストールできたら、最後に、
# gem install rails --local
でrailsがインストールできる。
ではさっそく、rails newでアプリのひな形を作成しよう。booksという名前で作ってみる。
$ rails new books create create README.rdoc create Rakefile create config.ru create .gitignore create Gemfile (省略) create vendor/plugins/.gitkeep run bundle install Fetching gem metadata from https://rubygems.org/. Error Bundler::HTTPError during request to dependency API Fetching full source index from https://rubygems.org/ Could not reach https://rubygems.org/ $
インターネットに接続していないマシンなので、最後のbundleに失敗した。これも手で入れる。
これが良く分からんのだけど、まず以下2行をアプリのディレクトリにある Gemfile という設定ファイルに追記する必要がある。
gem 'execjs' gem 'therubyracer'
アプリのディレクトリでrails serverすると、足りないパッケージが表示されてエラーになるので、これを確認して必要なgemを入れる。
$ rails server Could not find gem 'jquery-rails (>= 0) ruby' in the gems available on this machine. Run `bundle install` to install missing gems.
結局、さらに追加で手で入れたのは以下。
http://rubygems.org/gems/jquery-rails http://rubygems.org/gems/coffee-script-source http://rubygems.org/gems/coffee-script http://rubygems.org/gems/coffee-rails http://rubygems.org/gems/execjs http://rubygems.org/gems/sqlite3 http://rubygems.org/gems/uglifier http://rubygems.org/gems/sass-rails http://rubygems.org/gems/sass http://rubygems.org/gems/therubyracer http://rubygems.org/gems/libv8
libv8は "requires libv8 (~> 3.3.10)"と言われたので、ちょっと古いもの(3.3.10.4)を入れた。またこのモジュールはOSごとにあるため、
" 3.3.10.4 November 15, 2011 x86_64-linux " libv8-3.3.10.4-x86_64-linux.gem
を入れた。
全て入れ終わったら、もう一度rails serverコマンドで起動してみて、http://(IPアドレス):3000/ でアクセスできればOK。