サブタイトル:Rails対策 virtualbox自体を使って生のubuntuでrailsを動かそう
dockerは、簡単そうに見えるが、やっていることは違うことなわけなので、何かをやるにしても既存の方法が通じない。新しく調べてやるしかないし、それもうまく進捗するとは限らない。今回の件のように。
virtualbox自体を使って生のubuntuでrailsを動かせば、まぁ当然動かせるはずである。
フォルダのマウントとポートフォワーディングさえできれば、こっちのものだ。
あとSSHフォワーディングも出来ないとダメか。
Contents
intel_rapl no valid rapl domains found in package 0エラー
環境設定 > システム > プロセッサー > PAE/NX を有効にして保存してゲストを再起動。
https://askubuntu.com/questions/449574/intel-rapl-no-valid-rapl-domains-message-upon-boot
共有フォルダの設定
参考
How to Create Shared Folder on VirtualBox – Windows and Ubuntu
https://www.howtogeek.com/189974/how-to-share-your-computers-files-with-a-virtual-machine/
これだけだと出来ない。エラーが出ます。
ステップ6まで出来たら以下を実行。
vboxsf mounting failedエラー
cd /opt/VBoxGuestAdditions-*/init
sudo ./vboxadd setup
## shareフォルダをホストに作成+ゲストで割当設定
## ゲストを再起動
sudo mount -t vboxsf -o uid=1000,gid=1000 share /home/username/host
# or
sudo mount -t vboxsf -o share /home/username/host
https://stackoverflow.com/questions/28328775/virtualbox-mount-vboxsf-mounting-failed-with-the-error-no-such-device
SSHフォワーディングの設定
- ホスト側でOpenSSHの設定をして、SSH接続を可能にする。(windows powershellの場合)
ダウンロード:Install Win32 OpenSSH · PowerShell/Win32-OpenSSH Wiki
解答して、C:/OpenSSH ディレクトリを作成し、そこに中身を全てコピー。
Powershellを再起動すれば、ssh
コマンドが使用できる。
- virtualboxの設定
設定 > ネットワーク > ポートフォワーディング で以下を追加。
Host port 3022, guest port 22, name ssh, other left blank.
ゲストポート22をホストポート3022へ送る設定である。
- ゲストでSSHポートを開く設定をする
sudo apt-get -y install openssh-server
sudo apt-get update
updateでもしE: Problem executing scripts APT::Update::Post-Invoke-Successエラーが出たら、sudo apt-get remove libappstream3
で解決可能。
- 接続検証
ssh -p 3022 user@127.0.0.1
userをユーザー名へ変更。
IPアドレスは、ホストでifconfigをして確認。
- connection refusedエラー
IPアドレスが間違っていたりすると起こる。
ホスト、ゲストでそれぞれ、ifconfig/ipconfigでIPアドレスを確認して、同じか確かめてみよう。
ゲスト→ホストへポートフォワーディングされるわけなので、ホストでipconfigして出てきたイーサネット アダプター VirtualBox Host-Only Network
を見てそのIPアドレスを打ち込んでいけば、接続できるはず。
You can verify by doing ipconfig / ifconfig on both.
ローカルホストをポートフォワーディング
Railsで使用する、localhost:3000を、ホストで閲覧できるようにします。
先程同様、
設定 > ネットワーク > ポートフォワーディング で、
rails,TCP,0.0.0.0,3000,0.0.0.0,3000
のように設定し、保存します。
再起動が必要かもしれません。
Rails環境を構築して開発してみる
これで準備は整いました。
環境は完全に仮想環境のUbuntuで、開発は完全にホストで、ということができるようになったわけです。
Rails関連をインストール
sudo apt-get update
sudo apt-get install git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev python-software-properties libffi-dev nodejs
sudo apt-get install -y ruby-dev ruby
sudo gem install bundler
sudo gem install rails
アプリを作成してコントローラーを作成
cd ~/share
sudo rails new app
cd app
sudo rails g controller pages index
作ったコントローラーが正しく動作するか確認しましょう。
表示されてればおkですね。
既存のRailsアプリを開発するには
既存のRailsアプリディレクトリを、共有フォルダに入れます。
SSHで、Railsアプリディレクトリへcd
します。
ここでbundle install
とかrails s
ってやるとkやはりエラーになりますので、環境設定を少々やります。
rbenvをインストール
# [How To Install Ruby on Rails with rbenv on Ubuntu 16.04 | DigitalOcean](https://www.digitalocean.com/community/tutorials/how-to-install-ruby-on-rails-with-rbenv-on-ubuntu-16-04)
RailsアプリのRubyバージョンを確認して、rbenvでそのバージョンのRubyをインストール
ここでは、2.4.2を指定。
$ rbenv global 2.4.2
$ rbenv local 2.4.2
$ ruby -v
ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-linux]
$ rbenv rehash
ここまで来て、bundle installができます。
rbenv exec bundle install
毎回rbenv exec
するの面倒なので、エイリアス登録しときます。(場合によっては.bashrcに追記してください)
alias rails='rbenv exec rails'
alias bundle='rbenv exec bundle'
これで、bundle install
,rails s
のように実行してやることが出来ます。
apt-getで特定のバージョンをインストールするには
=
で指定してやる。
apt-get install apache2=2.2.8-1
virtualboxでクリップボードの共有を有効にする
設定 > 一般 > アドバンスド > クリップボードの共有 を選択。
Copy And Paste Between VirtualBox Host And Guest Machines | Liberian Geek
apt-get でE: Problem executing scripts APT::Update::Post-Invoke-Successエラー
E: Problem executing scripts APT::Update::Post-Invoke-Success ‘if /usr/bin/test -w /var/cache/app-info -a -e /usr/bin/appstreamcli; then appstreamcli refresh > /dev/null; fi’ E: Sub-process returned an error code
解決法:
sudo apt-get remove libappstream3
appstream – E: Problem executing scripts APT::Update::Post-Invoke-Success – Ask Ubuntu