- 2019/01/20
- Ruby
Ruby、Railsのオフラインインストール¶
例によってオフラインのWindows8 64bitでRubyをインストールするよ。
Rubyの導入¶
公式からRubyInstallerをDLしてくる。 インストールするのは記事作成時の最新版2.6.0を想定。
Note
RubyInstaller実行後、MSYS2をインストールするか確認が出る。 MSYS2のインストールを実行するとネットに.dbを取りに行く。
オフラインの場合は別途MSYS2のインストーラをDLしてくる必要がある。
Rubyのインストールに成功していれば、以下のコマンドでバージョンの確認ができる。
$ ruby --version
ruby 2.6.0p0 (2018-12-25 revision 66547) [x64-mingw32]
gemファイルをオンラインでインストール¶
以下のGemfileを作成。 bundle package で依存パッケージをすべて.gemファイルとしてDLしてくる。
$ touch Gemfile
$ echo "source 'http://rubygems.org'" >> Gemfile
$ echo "gem 'rails', '5.2.2'" >> Gemfile
$ bundle package
$ ls vendor/cache
オフライン環境で以下のコマンドを実行。自動的に依存パッケージ全てインストールされる。 bundleでなくてgemなので注意。
$ gem install --local rails-5.2.2.gem
Railsの導入¶
上まで実行していれば、既にrailsコマンドが使える。 Railsのインストーラもあるようだが、折角なのでgemで続ける。
$ gem list | grep rails
rails (5.2.2)
rails-dom-testing (2.0.3)
rails-html-sanitizer (1.0.4)
sprockets-rails (3.2.1)
$ rails -v
Rails 5.2.2
$ rails new [project name]
rails new 実行時にプロジェクトディレクトリにあるGemfileのパッケージをインストールする為、 run bundle install が実行される。 しかし、オフラインなのでインストールはされないはず。
サーバを起動¶
先程のgemをインストールできなかったエラーの影響がここに出てくる。
$ cd [project path]
$ bin/rails s
[ruby path]/lib/ruby/2.6.0/bundler/resolver.rb:287:in `block in verify_gemfile_dependencies_are_found!': Could not find gem 'sqlite3 x64-mingw32' in any of the gem sources listed in your Gemfile. (Bundler::GemNotFound)
# 以下略
今度は [project path]/Gemfile をオンラインに持っていき、先程と同様に.gemファイルをDLしてくる。
DLしてきた.gemファイルは [project path]/vendor/cache に配置。
Bundlerのバージョンエラー¶
再度サーバ起動を実行。
$ bin/rails s
[ruby path]/lib/ruby/2.6.0/bundler/lockfile_parser.rb:108:in `warn_for_outdated_bundler_version': You must use Bundler 2 or greater with this lockfile. (Bundler::LockfileError)
Bundlerのバージョンは2.0.1。 Gemfile.lockのBundlerのバージョンが問題だったのか詳しく調べていないが、Gemfile.lockをリネームしたらバージョンが下がっていた。
$ bundle --version
Bundler version 2.0.1
$ mv Gemfile.lock Gemfile.lock.bk
$ bin/rails s
$ diff Gemfile.lock Gemfile.lock.bk
211c211
< 1.17.2
---
> 2.0.1
SQLite3のエラー¶
別のエラー発生。
$ bin/rails s
[ruby path]/lib/ruby/gems/2.6.0/gems/bootsnap-1.3.2/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require': cannot load such file -- sqlite3/sqlite3_native (LoadError)
from [ruby path]/lib/ruby/gems/2.6.0/gems/activesupport-5.2.2/lib/active_support/dependencies.rb:291:in `block in require'
from [ruby path]/lib/ruby/gems/2.6.0/gems/activesupport-5.2.2/lib/active_support/dependencies.rb:257:in `load_dependency'
# 以下略
エラーが起きている大元はsqlite3.rb。 sqlite3/2.6/sqlite3_native がないので、 sqlite3/sqlite3_native を探しに行くが、更にないのでLoadErrorが出る。
begin
RUBY_VERSION =~ /(\d+\.\d+)/
require "sqlite3/#{$1}/sqlite3_native"
rescue LoadError
require 'sqlite3/sqlite3_native'
end
2.4ディレクトリなんかをリネームして解決するものでもないので、Windows用にdllをDLしてくる必要がある。
SQLiteの公式 のPrecompiled Binaries for Windowsから64-bit DLL (x64)をDL。 適当な場所に展開して、Rubyのインストールディレクトリのbinに配置。
$ mv sqlite3.dll [ruby path]/bin/
$ mv sqlite3.def [ruby path]/bin/
$ ls [ruby path]/bin/ | grep sqlite3
sqlite3.def
sqlite3.dll*
オンラインの場合、インストールコマンドを叩けば完了。
$ gem uninstall sqlite3 --all
$ gem install sqlite3 --platform ruby -- --with-opt-include=[ruby path]/bin --with-sqlite3-dir=[ruby path]/bin --with-sqlite3-lib=[ruby path]/bin
$ bin/rails s
=> Booting Puma
=> Rails 5.2.2 application starting in development
=> Run `rails server -h` for more startup options
Note
gem install コマンドの末尾に ` – –with-opt-include=[ruby path]/bin –with-sqlite3-dir=[ruby path]/bin –with-sqlite3-lib=[ruby path]/bin` をつける方が確実かもしれないが、 Rubyのインストールディレクトリ内ならなくても大丈夫そう?
オフラインの場合、上述の bundle package だとプラットフォームがどうのとエラーが出て.gemをDLできない。 なので、オンラインでrubygems.orgから.gemファイルをDLしてくる。
$ curl https://rubygems.org/gems/sqlite3/sqlite3-1.3.13.gem --output sqlite3-1.3.13.gem
オフラインでgem installを実行すると、Msysにsqlite3.hがないからエラーが出てしまう。
$ gem install --local sqlite3-1.3.13.gem --platform ruby
ERROR: Error installing sqlite3-1.3.13.gem:
ERROR: Failed to build gem native extension.
# 中略
checking for sqlite3.h... no
sqlite3.h is missing. Install SQLite3 from http://www.sqlite.org/ first.
SQLite3の公式からソースをDLしてきてビルドするのが多分定石。 今回は面倒だったので、オンラインから以下の必要なファイルを持ってきてオフラインのRubyに配置した。
$ cp sqlite3.h [ruby path]/msys64/mingw64/include/
$ cp sqlite3ext.h [ruby path]/msys64/mingw64/include/
$ cp libsqlite3-0.dll [ruby path]/msys64/mingw64/bin/
$ cp sqlite3.exe [ruby path]/msys64/mingw64/bin/
$ cp sqlite3.pc [ruby path]/msys64/mingw64/include/
$ cp slibsqlite3.a [ruby path]/msys64/mingw64/include/
$ cp slibsqlite3.dll.a [ruby path]/msys64/mingw64/include/
$ gem install --local sqlite3-1.3.13.gem --platform ruby
This could take a while...
Successfully installed sqlite3-1.3.13
Parsing documentation for sqlite3-1.3.13
Installing ri documentation for sqlite3-1.3.13
Done installing documentation for sqlite3 after 0 seconds
1 gem installed
$ gem info sqlite3
sqlite3 (1.3.13)
サーバを起動すると http://localhost:3000/ でRailsにアクセスできるようになっているはず。
$ cd [rails project path]
$ bin/rails s
=> Booting Puma
=> Rails 5.2.2 application starting in development
=> Run `rails server -h` for more startup options