作成日:2012/09/08

概要

Ruby on Railsは、インストールの際のコマンド群が、インターネットに接続していることを前提とした作りになっている。しかし諸事情からインターネットに通信できないサーバ上に、手でパッケージファイルを一つ一つコピーしてrails環境を構築してみた。この際、いろいろハマったのでそのメモ。

しかし最初に言っておくが、苦労ばっかり多くて得るものが無いため、仕様・要件としてインターネットに接続できない組織内サーバなどの場合は、「rails環境を諦める」のが最善の策である。と思った。

環境

以下の環境・バージョンでインストールを行う。

LinuxCentOS 5.5 (64bit)
Ruby1.9.3

予備知識

ローカルファイルでのgemコマンドによるインストール

通常、gemコマンドはインターネットからパッケージを拾ってこようとするため、ローカルにあるファイルでインストールするときはオプション --local を付ける。この際、パッケージの拡張子やバージョン番号は省略できる。

# gem install rails-3.2.8.rc1.gem --local
もしくは
# gem install rails --local

rubygems.orgの作り

パッケージを手で拾ってくるときはhttp://rubygems.org/からダウンロードするため、このサイトの作りを知っておくと良い。

また、.gemファイルは実はzipファイルなので、中味を覗いてみたければ拡張子を.zipに変えて展開してみれば良い。

Railsパッケージのダウンロード

rails本体のダウンロード

rails本体を、GitHubのhttps://github.com/rails/railsからダウンロードする。下図参照。

[branch]から最新版を選び(私が試した時は3-2-STABLEだった)、その上の雲のアイコン[ZIP]をクリックしてZIPファイルをダウンロード。

railsの付属パッケージのインストール

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/i18nhttp://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だけこの罠があり、ハマった。

rails本体のインストール

依存するgemパッケージを入れたら、[activesupport] [actionpack] などサブモジュールをgem install xxxxx --localでインストールする。付属モジュールが全てインストールできたら、最後に、

# gem install rails --local

でrailsがインストールできる。

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に失敗した。これも手で入れる。

Gemfileの修正

これが良く分からんのだけど、まず以下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。


プログラミングメモ

▲HOME

▲ABOUT ME