14日目 遠回りしながらRailsインストール[JRuby 9.1.17]⑦
おはようございます。
昨日のRailsインストールの続きです。(昨日の記事はこちら)
昨日までで、JRuby 9.1.17に対して、Railsをインストールするためには以下のGemのバージョンなら動きそうということがわかりました。
・Rails 4.2.4
・bundle 1.17.3
そして、「bundle install」を用いて、Railsごとインストールするための必要な手順とか注意点とか色々と把握できたので、今回の記事こそ本当にRailsのインストールを行なおうと思います。
何度目かのJRuby on Railsのインストール挑戦
1. Gemfileについて
まず、「bundle init」を使って、Gemfileを作る必要があるかと思いますが、実は数回前の記事にて、「bundle init」を実行してGemfileを生成済でした。
また、Githubにて公開されているheroku上で動く公式のサンプルアプリのGemfileを参考にしたりもしていました。
例えば、上のGemfileの内容をコピペし、以下の記述
ruby '2.3.1', :engine => 'jruby', :engine_version => '9.1.8.0'
を
ruby '2.3.3', :engine => 'jruby', :engine_version => '9.1.17.0'
というように自分自身のPCへのJRubyのインストールバージョンに合わせて変えて、「bundle install」を実行したりしてみました。
ですが、改めて考えた結果、まずは、シンプルに「rails」のみ指定してGem(と「rails」に関連するGem)をインストールしようと思いましたので、Gemfileの内容は以下のように変えてみることにしました。
source 'https://rubygems.org'
ruby '2.3.3', :engine => 'jruby', :engine_version => '9.1.17.0'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.2.4'
2. 「bundle install」実行に関して
前章にて、Gemfileを変更した状態で「bundle install」を実行し、Railsを含めた各種Gemのインストールを試みます。
ただし、「bundle install」実行の際には、以下の(1)~(3)の点を考慮する必要があるので、
(1) JRuby(9.1.17)を用いること
(2) Bundlerは「1.17.3」を指定すること
(3) 「--path vendor/bundle」オプションを付けて、GemをRailsアプリのプロジェクトデータ内にインストールすること
以下のようにコマンドを入力して、「bundle install」を実行していきます。
jruby -S bundle _1.17.3_ install --path vendor/bundle
実際にコマンドプロンプト上から、以下のように①と②の操作を実行すると、
次々とRailsとそのRailsに関連するGemがインストールされて、以下のように「Bundle complete! ~略~ 」というメッセージが出ましたら、Railsのインストール完了です。
「bundle install」が実行される前の、railsアプリデータを配置予定のディレクトリ内(例:「C:\Users\youto\Desktop\playtool\real_chat」配下)は以下の写真のように「Gemfile」しかありませんが、
先ほどの「bundle install」に「--path vendor/bundle」オプションを付けてコマンドを実行した後のディレクトリ配下は以下のようになり、
上記写真の「vendor」フォルダから、「vendor」⇒「bundler」⇒「ruby」⇒「2.3.0」(環境によってフォルダ名が変わるかも?)⇒「cache」の順にフォルダの中を次々に開いて辿っていくと、以下のように各種gemがインストールされていることを確認できます。
3. Railsアプリの新規作成
作業は1と2のRailsインストールで終わりではなく、Railsアプリの新規作成も続けて実行します。
前回の記事を以下に再度載せますが、
「bundle exec rails new .」を実行しようとすると、rails生成と同時に「bundle install」を行なわれてしまうため、注意しないと、どのようにGemファイルの内容が変更されて、そして各種Gemがインストールされたのか、自分自身の中で把握することが難しくなり、混乱してしまうかもしれません。
そこで、「bundle exec rails new .」に「--skip-bundle」を付けることによって、rails生成はするものの、自動的に「bundle install」は行わないようにします。
bundle exec rails new . --skip-bundle
実際にコマンドを入力する際には、前述の2と同様に以下を考慮する必要があります。
(1)JRuby(9.1.17)を用いること
(2)Bundlerは「1.17.3」を指定すること
(3)「--skip-bundle」オプションを付けて、自動的に「bundle install」を行なわないようにすること
(4)データベースには「postgresql」を用いること(※(4)は必ずしも考慮する必要がない。)
特に(4)の点については、今後アプリをデプロイしようとするheroku(サーバーやデータベースなど特に設定しなくても手軽にWebアプリをデプロイして公開できるプラットフォーム:Paas)は、標準で「Heroku Postgres」というherokuが直接提供するSQLのデータベースサービスを利用しております。
「Heroku Postgres」は個人で使う程度であれば、ある程度までは無料で使えるので、ぜひ使っていこうと思っています。
なお、ローカルで動かしている限りは、データベースには「PostgreSQL」を必ずしも利用する必要がないのですが、わたしとしてはなるべく本番環境(Heroku上)も開発環境(ローカルPC)もできるだけ同じ状況・条件でやりたいというこだわりがあるため、ローカルPCも「PostgreSQL」を利用したいと思っています。
そのため、Railsアプリを新規作成する際に、私の場合は上記(4)の点も考慮して作成しますが、読者の皆様の場合は各自で判断すると良いかと思います。(以下に参考記事を載せます。)
※なお、「PostgreSQL」の説明と、ローカルで動かす場合にデータベースには「PostgreSQL」を必ずしも利用する必要がない場合についての解説は明日の記事にて説明できればと思います。
話が若干逸れましたが、先ほどの(1)~(4)の点を考慮したうえでの、「bundle exec rails new .」を実行するコマンドは以下の通りです。
jruby -S bundle _1.17.3_ exec rails new . --skip-bundle --database=postgresql
実際には以下の写真のように①と②の操作を実行して、コマンドを入力して、Gemファイルを上書きして良いかの確認メッセージに対して「Y」キーを押し、「Enter」キーを押して上書きを許可していきます。
すると、以下のようにRailsアプリを動かすために必要なファイルが次々と作られて、Railsアプリが新規作成されます。
4. 自動上書き後のGemfileの内容確認&追記
前述の3を実行後は以下のようになっており、Gemfileの内容が変更されたことがわかります。
source 'https://rubygems.org'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.2.4'
# Use jdbcpostgresql as the database for Active Record
gem 'activerecord-jdbcpostgresql-adapter'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 5.0'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# Use CoffeeScript for .coffee assets and views
gem 'coffee-rails', '~> 4.1.0'
# See https://github.com/rails/execjs#readme for more supported runtimes
gem 'therubyrhino'
# Use jquery as the JavaScript library
gem 'jquery-rails'
# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
gem 'turbolinks'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.0'
# bundle exec rake doc:rails generates the API under doc/api.
gem 'sdoc', '~> 0.4.0', group: :doc
# Use ActiveModel has_secure_password
# gem 'bcrypt', '~> 3.1.7'
# Use Unicorn as the app server
# gem 'unicorn'
# Use Capistrano for deployment
# gem 'capistrano-rails', group: :development
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
ここで、変更後のGemfileの先頭数行に注目すると、
source 'https://rubygems.org'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.2.4'
# Use jdbcpostgresql as the database for Active Record
~(以下略)~
Railsに対するGemのバージョンを指定(gem 'rails', '4.2.4')した箇所は残っているものの、Rubyとjrubyに対するバージョンを指定した箇所が消えていました。(※最初に編集した時点のGemfileでは、以下の通りとなっていました。)
source 'https://rubygems.org'
ruby '2.3.3', :engine => 'jruby', :engine_version => '9.1.17.0'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.2.4'
Rubyとjrubyに対するバージョンを指定した箇所の行がなくとも、動作するかもしれませんが、念のため、「ruby '2.3.3', :engine => 'jruby', :engine_version => '9.1.17.0'」を追記して、最終的なGemfileの内容を以下の通りといたします。
source 'https://rubygems.org'
ruby '2.3.3', :engine => 'jruby', :engine_version => '9.1.17.0'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.2.4'
# Use jdbcpostgresql as the database for Active Record
gem 'activerecord-jdbcpostgresql-adapter'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 5.0'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# Use CoffeeScript for .coffee assets and views
gem 'coffee-rails', '~> 4.1.0'
# See https://github.com/rails/execjs#readme for more supported runtimes
gem 'therubyrhino'
# Use jquery as the JavaScript library
gem 'jquery-rails'
# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
gem 'turbolinks'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.0'
# bundle exec rake doc:rails generates the API under doc/api.
gem 'sdoc', '~> 0.4.0', group: :doc
# Use ActiveModel has_secure_password
# gem 'bcrypt', '~> 3.1.7'
# Use Unicorn as the app server
# gem 'unicorn'
# Use Capistrano for deployment
# gem 'capistrano-rails', group: :development
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
5. 「bundle update」の実行
あとは最後に「bundle update」を実行します。こちらもコマンド入力の際には、以下の点を考慮する必要があります。
(1)JRuby(9.1.17)を用いること
(2)Bundlerは「1.17.3」を指定すること
そこで、以下のようにコマンドを入力してみます。
jruby -S bundle _1.17.3_ update
実際には、以下の①、②のようにコマンドを入力した後に3行ほどメッセージが出て、「…」と点々が何分か続きますので、しばらく待機します。
そしたら、以下のように一気に各種Gemが更新(またはそのまま使用)することになって、
最後に、以下のように「Bundle updated!」というメッセージが表示されたら、各種Gemの更新完了です。(以降に出ているメッセージは今のところ気にしなくてもよさそうです。)
これで、ようやくRailsをインストールするために遠回りした長い日々は終わり、Railsアプリも新規作成できました。
補足
以前の記事にて、最後に「gem install rails」という方法を用いてインストールを試みた際に、「racc」について、Rubyが2.5以上であることが求められている旨のエラーメッセージが表示されていて、その問題が未解決のままとなっていましたが、こちらの問題についてはいつか解決できたらいいなと思います。(今はRailsアプリを作成して、heroku上へデプロイしてアプリを動かすことが目標なので、置いておきます。)
おわりに
インストールするために随分と遠回りしてしまいましたが、やっと、インストールしてRailsアプリを作成することができたので、次の段階へと進めそうです。
次は、作成したアプリをローカルで動かせるかどうか確認してみようと思いますので、「postgreSQL」によるデータベースの設定などを含めて色々と取り組んでみようと思います。
今日も読んでくださってありがとうございました。
次のターンへ続きます。