はるか昔にphpで作成したwebサイトをRailsで作り直したい。ということで、まずはRails環境を作ります。Railsに関しては、ずっと前に「Ruby on Rails チュートリアル」を一度やっただけです。
環境作成にあたって、以下のサイトにお世話になりました。
LinuxにRuby on Railsをインストールする | tsuchikazu blog
バージョン情報は以下です。
rbenvのインストール
Ruby環境をバージョン毎に管理してくれる有名なやつ。インストール方法はgithubに載ってます。
GitHub - rbenv/rbenv: Groom your app’s Ruby environment
githubからモジュールをクローンしてきます。
$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
ユーザ環境設定ファイルに、システム環境変数の情報とrbnevのinit処理を記載してあげます。
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile $ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
ユーザを入り直せば、rbenv使えるようになります。以下はバージョン確認。
$ rbenv -v rbenv 1.1.0-2-g4f8925a
ruby-buildの追加
Rubyを簡単にインストールできるようする、rbenvのプラグインらしいです。これもgithubにインストール方法が載ってます。
GitHub - rbenv/ruby-build: Compile and install Ruby
というか、githubからクローンしてくるだけ。
$ git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build $ rbenv install Usage: rbenv install [-f|-s] [-kpv] <version> rbenv install [-f|-s] [-kpv] <definition-file> rbenv install -l|--list rbenv install --version -l/--list List all available versions -f/--force Install even if the version appears to be installed already -s/--skip-existing Skip if the version appears to be installed already ruby-build options: -k/--keep Keep source tree in $RBENV_BUILD_ROOT after installation (defaults to $RBENV_ROOT/sources) -p/--patch Apply a patch from stdin before building -v/--verbose Verbose mode: print compilation status to stdout --version Show version of ruby-build For detailed information on installing Ruby versions with ruby-build, including a list of environment variables for adjusting compilation, see: https://github.com/rbenv/ruby-build#usage
Rubyのインストール
そうして、Rubyをインストールします。Rails5ではRuby2.2以上が必要のようで、現時点で安定版最新バージョンである2.4.0を入れます。
$ rbenv install 2.4.0 Downloading ruby-2.4.0.tar.bz2... -> https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.0.tar.bz2 Installing ruby-2.4.0... Installed ruby-2.4.0 to /home/rails/.rbenv/versions/2.4.0 $ rbenv rehash
バージョン確認でインストールされているかどうかを確認。
$ rbenv versions * system (set by /home/rails/.rbenv/version) 2.4.0
適当なディレクトリを作成して、インストールしたRubyバージョンの環境を作成します。
$ mkdir test $ cd test $ rbenv local 2.4.0 $ rbenv versions system * 2.4.0 (set by /home/rails/test/.ruby-version)
Railsのインストール
最後にRailsを入れます。Railsも最新版である5.0.1を入れます。gemを使ってインストール。
$ gem install rails -v 5.0.1 $ rails -v Rails 5.0.1
動作確認のため、適当な新規プロジェクトを作成して、rails serverを起動してみます。
$ rails new yukamaki (略) $ rails server /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/activesupport-5.0.1/lib/active_support/xml_mini.rb:51: warning: constant ::Fixnum is deprecated /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/activesupport-5.0.1/lib/active_support/xml_mini.rb:52: warning: constant ::Bignum is deprecated /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.13.7/lib/bundler/runtime.rb:94:in `rescue in block (2 levels) in require': There was an error while trying to load the gem 'uglifier'. (Bundler::GemRequireError) Gem Load Error is: Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes. Backtrace for gem load error is: /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/execjs-2.7.0/lib/execjs/runtimes.rb:58:in `autodetect' /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/execjs-2.7.0/lib/execjs.rb:5:in `<module:ExecJS>' /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/execjs-2.7.0/lib/execjs.rb:4:in `<top (required)>' /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/uglifier-3.0.4/lib/uglifier.rb:5:in `require' /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/uglifier-3.0.4/lib/uglifier.rb:5:in `<top (required)>' /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.13.7/lib/bundler/runtime.rb:91:in `require' /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.13.7/lib/bundler/runtime.rb:91:in `block (2 levels) in require' /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.13.7/lib/bundler/runtime.rb:86:in `each' /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.13.7/lib/bundler/runtime.rb:86:in `block in require' /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.13.7/lib/bundler/runtime.rb:75:in `each' /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.13.7/lib/bundler/runtime.rb:75:in `require' /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.13.7/lib/bundler.rb:106:in `require' /home/rails/test/yukamaki/config/application.rb:7:in `<top (required)>' /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:88:in `require' /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:88:in `block in server' /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:85:in `tap' /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:85:in `server' /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:49:in `run_command!' /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/railties-5.0.1/lib/rails/commands.rb:18:in `<top (required)>' /home/rails/test/yukamaki/bin/rails:9:in `require' /home/rails/test/yukamaki/bin/rails:9:in `<top (required)>' /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/spring-2.0.0/lib/spring/client/rails.rb:28:in `load' /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/spring-2.0.0/lib/spring/client/rails.rb:28:in `call' /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/spring-2.0.0/lib/spring/client/command.rb:7:in `call' /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/spring-2.0.0/lib/spring/client.rb:30:in `run' /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/spring-2.0.0/bin/spring:49:in `<top (required)>' /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/spring-2.0.0/lib/spring/binstub.rb:31:in `load' /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/spring-2.0.0/lib/spring/binstub.rb:31:in `<top (required)>' /home/rails/.rbenv/versions/2.4.0/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require' /home/rails/.rbenv/versions/2.4.0/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require' /home/rails/test/yukamaki/bin/spring:14:in `<top (required)>' bin/rails:3:in `load' bin/rails:3:in `<main>' Bundler Error Backtrace: from /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.13.7/lib/bundler/runtime.rb:90:in `block (2 levels) in require' from /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.13.7/lib/bundler/runtime.rb:86:in `each' from /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.13.7/lib/bundler/runtime.rb:86:in `block in require' from /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.13.7/lib/bundler/runtime.rb:75:in `each' from /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.13.7/lib/bundler/runtime.rb:75:in `require' from /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.13.7/lib/bundler.rb:106:in `require' from /home/rails/test/yukamaki/config/application.rb:7:in `<top (required)>' from /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:88:in `require' from /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:88:in `block in server' from /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:85:in `tap' from /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:85:in `server' from /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:49:in `run_command!' from /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/railties-5.0.1/lib/rails/commands.rb:18:in `<top (required)>' from /home/rails/test/yukamaki/bin/rails:9:in `require' from /home/rails/test/yukamaki/bin/rails:9:in `<top (required)>' from /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/spring-2.0.0/lib/spring/client/rails.rb:28:in `load' from /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/spring-2.0.0/lib/spring/client/rails.rb:28:in `call' from /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/spring-2.0.0/lib/spring/client/command.rb:7:in `call' from /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/spring-2.0.0/lib/spring/client.rb:30:in `run' from /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/spring-2.0.0/bin/spring:49:in `<top (required)>' from /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/spring-2.0.0/lib/spring/binstub.rb:31:in `load' from /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/spring-2.0.0/lib/spring/binstub.rb:31:in `<top (required)>' from /home/rails/.rbenv/versions/2.4.0/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require' from /home/rails/.rbenv/versions/2.4.0/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require' from /home/rails/test/yukamaki/bin/spring:14:in `<top (required)>' from bin/rails:3:in `load' from bin/rails:3:in `<main>'
起動しないですねえ。
「Gem Load Error is: Could not find a JavaScript runtime.」ってメッセージが怪しそうだ、とググってみたら、「Ruby on Rails チュートリアル」に以下の記載が。そんなん覚えてねーし。
第1章 ゼロからデプロイまで | Rails チュートリアル
JavaScriptランタイムがインストールされていないというエラーが表示された場合は、GitHubのexecjsページにあるインストール可能なランタイムの一覧からJavaScriptランタイムを入手してください。 個人的にはNode.jsがおすすめです)。
Node.jsがおすすめとあるので、Node.jsを入れます。入れ方は公式サイトに書いてありました。
Installing Node.js via package manager | Node.js
rootで実行です。
# curl --silent --location https://rpm.nodesource.com/setup_6.x | bash - # yum -y install nodejs
改めてサーバーを起動します。
$ rails server /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/activesupport-5.0.1/lib/active_support/xml_mini.rb:51: warning: constant ::Fixnum is deprecated /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/activesupport-5.0.1/lib/active_support/xml_mini.rb:52: warning: constant ::Bignum is deprecated => Booting Puma => Rails 5.0.1 application starting in development on http://localhost:3000 => Run `rails server -h` for more startup options /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/activesupport-5.0.1/lib/active_support/core_ext/numeric/conversions.rb:138: warning: constant ::Fixnum is deprecated Puma starting in single mode... * Version 3.6.2 (ruby 2.4.0-p0), codename: Sleepy Sunday Serenity * Min threads: 5, max threads: 5 * Environment: development * Listening on tcp://localhost:3000 Use Ctrl-C to stop
あれ、リモートから繋がらんぞ。
デフォルトではローカルホストからしか繋がらないので、ipアドレスをバインド指定して起動する必要があるそうです。「Ruby on Rails チュートリアル」にも書いてありましたね。うん、全く覚えてない。
$ rails server -b 0.0.0.0 /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/activesupport-5.0.1/lib/active_support/xml_mini.rb:51: warning: constant ::Fixnum is deprecated /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/activesupport-5.0.1/lib/active_support/xml_mini.rb:52: warning: constant ::Bignum is deprecated => Booting Puma => Rails 5.0.1 application starting in development on http://0.0.0.0:3000 => Run `rails server -h` for more startup options /home/rails/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/activesupport-5.0.1/lib/active_support/core_ext/numeric/conversions.rb:138: warning: constant ::Fixnum is deprecated Puma starting in single mode... * Version 3.6.2 (ruby 2.4.0-p0), codename: Sleepy Sunday Serenity * Min threads: 5, max threads: 5 * Environment: development * Listening on tcp://0.0.0.0:3000
繋がったー。