IoT的なシステムを作る上で、センサ情報をラズパイが取得し、webアプリへ送信するものを作るならラズパイ上でruby on Railsをやるのが楽なのでは?と思って環境構築したときに詰まったことを書きます。
目次
- 目的
- 環境構築
- 参考
目的
ラズパイ上でRuby on Rails環境を作ります。現在の環境は以下。
- raspberry pi 3 B +
- ubuntu MATE
Railsとは
Ruby on RailsはRubyで書かれたwebアプリケーションフレームワークであり、webアプリケーションを他のフレームワークよりも少ないコードでかけるように設計されています。 Model View Controllerアーキテクチャに基づいて構築されています。
- model:処理
- view:画面表示部分
- controller:modelとviewをつなぐ処理 modelとviewへの命令に変換する
modelとviewの中間処理をcontrollerに書く、というような思想がModel View Controllerです。図はwikipediaを参考にしました。
環境構築
普段通りアップデートを確認した後、以下のコマンドを打っていきます。先にnode.jsをインストールしているのは、これがないとjavascriptがないと怒られるからだそうです。
$sudo apt-get install nodejs
次に参考で見たのでは以下のようにやっていましたが、rbenv install -listで入れたいバージョンが出てこないエラーが発生しました。
$sudo apt-get install rbenv ruby-build
理由についていろいろと調べたところ、知人によってsudoでrbenvを入れたせいでroot権限が付与されたのではないかと指摘されますた。 ですので、試行錯誤の結果、gitからcloneでインストールしたら成功しました。APPはお好きな名前に変更してください。
$sudo rm -rf ~/.rbenv
$git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build //続いているので注意
$rbenv install -l
$rbenv install 2.5.0
$rbenv rehash
$sudo reboot
$gem install bundler
$gem install rails
$ sudo apt-get install libsqlite3-dev
$ sudo reboot
$ mkdir rails
$ cd rails
$ rails new APP —skip-bundle //APPアプリを作成。
$ cd APP
ここで、ラズパイと相性が悪い部分があるので、エラー回避のため、config/boot.rbの以下を削除(コメントアウト)します。
#require ‘bootsnap/setup’
ラズパイの接続状況を調べて、以下のように書きます。右上の有線・無線マークの接続情報から見られます。
$ rails s -b (ラズパイの現在のPIアドレス) -d
これにて成功です。http://(ラズパイのIPアドレス):3000 を開いて確認します。
成功ではありますが、chromium-driver-helperがサポート終了するらしいので、webdriberに移行して欲しいというメッセージが現れます。
+--------------------------------------------------------------------+
| |
| NOTICE: chromedriver-helper is deprecated after 2019-03-31. |
| |
| Please update to use the 'webdrivers' gem instead. |
| See https://github.com/flavorjones/chromedriver-helper/issues/83 |
| |
+--------------------------------------------------------------------+
rails/Gemfileを以下のように変更して、
group :test do
# Adds support for Capybara system testing and selenium driver
gem 'capybara', '>= 2.15'
gem 'selenium-webdriver'
# Easy installation and use of chromedriver to run system tests with Chrome
gem 'chromedriver-helper' => gem 'webdrivers' //ここ
end
$bundle install
同様にサーバーを立てて動作を確認しましょう。 アプリケーションを作るたびにこの設定をした方がいいと思います。このときもconfig/boot.rbの設定変更を忘れずに。
雑記
以前windowsに入れたときにめちゃくちゃ大変だった記憶があります。rubyのバージョンが合わないとすぐエラー!要注意。