rdebug-ideの起動を速くしたいと思った経緯
以前私は こちらの記事でステップ実行が出来る環境までもっていく方法を記載いたしました。
簡単な概要だけ記載すると、
- CentOS7がゲストOS ... 用途はRailsの環境
- Windows10がホストOS ... 用途はVSCodeを使用してRailsのリモートデバッグ
というものです。
この際CentOS7とWindows10で共有するフォルダの環境としては
- VirtualBox上にCentOS7をインストールする。
- VirtualBoxの機能を使ってWindowsのフォルダを共有する。
という事をこの箇所で 行ってきました。
そして実際にRailsの学習を行う為に下記コマンドを打ち込みましたが。。。。
bundle exec rdebug-ide --host 0.0.0.0 --port 1234 --dispatcher-port 26126 -- bin/rails s -b 0.0.0.0
このコマンドとほぼ同時にVSCodeからデバッグ開始を行ったとしても、
ブラウザからアクセスして動作確認できるようになるまで、
1分30秒かかりました。
確認方法としては
time bundle exec rdebug-ide --host 0.0.0.0 --port 1234 --dispatcher-port 26126 -- bin/rails s -b 0.0.0.0
とし、
Use Ctrl-C to stop
と出た瞬間にCTRL+Cを押下して出てきた時間が 1m30sです。
正直初心者がややこしい処理を作っている途中にデバッグ確認を多くしたい場合、非常にストレスがかかります。
どうすれば速くなるの?
こちらの記事を読みましたが どうもVirtualBoxの共有フォルダが遅い模様。
実際に私も同様の問題かVirtualBox上でWindowsのフォルダをマウントしたディレクトリ以外でRailsのアプリを作成し実行してみましたが、超高速化(約10秒で起動)しました。
Windowsとのフォルダ共有 + デバッグ実行の高速化の為に
- Windows10でVSCodeを使用しつつ
- VSCodeからステップ実行が出来る環境で
- CentOS7上で動作しているRailsをリモートデバッグする方法
をVirtualBoxの共有フォルダの機能を使用せずにストレスなくデバッグする為にはどうすればよいのかと考えてみましたが、私が絞り出せたアイデアは下記2点です。
- CentOS7上にSambaをインストールしそのディレクトリ上にRailsアプリをインストールする。
- CentOS7からWindows10の共有フォルダにcifsでアクセスする。
それぞれの特徴としては下記です。
-
①の特徴
-
CentOS7に共有フォルダを作成しWindows10からアクセスする。
-
CentOS7上にディレクトリを置いている為、間違いなくRailsの起動が速くなる。
-
しかしVirtualBox上の仮想マシンが壊れた段階で作成したRailsアプリの内容ごと消えてしまう可能性がある。
-
②の特徴
- Windows10に共有フォルダを作成しCentOS7からアクセスする。
- Railsの起動の際に若干遅くなる見込みがある。
- VirtualBox上の仮想マシンに問題があったとしてもファイルはWindows上に存在する為、無事である。
試してみたところどちらもRailsサーバー起動までに10秒を切る好タイムを出しました。
正直Gitでソースコードをこまめにpushすると思うので、ソースコードが消えたらどうしようという問題はあまり気にしなくていいかもしれないのですが、
好き嫌いがあると思うので、今回は両方の構築方法を記載しておきます。
①の環境構築方法
主に操作はCentOS7側(ゲストOS)になります。
まずはsambaの環境構築方法です。
筆者は例のごとくsambaも初心者で、調査しながら出来た方法を記載しております。
※前回と同様CentOS上には userという名前のユーザー名を記載しております。
※特にselinux周りのコマンドは完全にわかっておりません。。。
sudo yum install -y samba
sudo firewall-cmd --add-service=samba --permanent --zone=public
sudo firewall-cmd --reload
sudo setsebool -P samba_enable_home_dirs on
sudo pdbedit -a user
sudo systemctl enable smb nmb
次にsambaの設定ファイルを記載します。
vim /etc/samba/smb.conf
下記が変更後のファイル内容です。
主にこちらの記事 を参考にしました。
下記設定では主にshareという共有ディレクトリを作成します。
[global]
#workgroup = SAMBA
workgroup = WORKGROUP
security = user
unix charset = UTF-8
dos charset = CP932
wins support = yes
passdb backend = tdbsam
printing = cups
printcap name = cups
load printers = no
cups options = raw
[share]
path = /home/user/share
read only = no
browsable = yes
writeable = yes
各種設定内容は省略致しますが、
後は各種共有用のフォルダを作成設定し、sambaを再起動するのみです。
mkdir -p /home/user/share
chmod -R 0777 /home/user/share
chcon -R -t samba_share_t /home/user/share
sudo systemctl restart smb nmb
ここまでくればWindows10側(ホストOS側)から
CentOS側の IPアドレス+ディレクトリ名で可能です。
実際にアクセスしてみましょう。
私のゲストOS(CentOS7)から
\\192.168.1.27\share
とエクスプローラーのアドレス部分に打ち込むことでアクセス可能です。
ユーザー名とパスワードが求められた場合は、
CentOS上のユーザー名とパスワードを入力すればOKです。
あとはCentOS7側から共有フォルダにRailsアプリケーションを作成すれば、Windows側でも見れるようになります。
②の環境構築方法
Windows側の設定
こちらはWindows10側に共有フォルダを配置し、
CentOS7側からアクセスする方法です。
まずWindows10側で共有フォルダを作成します。
今回は rails_win_share
というフォルダを作成しました。
その後、共有フォルダの設定を行います。
フォルダを右クリックしてプロパティを選択した後、
下図共有タブから共有ボタンを押下し、
さらにその先で共有(H)を選択します。
その後の画面で終了を押下すれば共有完了です。
実際に \\(Windows側のIPアドレス)\rails_win_share
にアクセスできるか確かめてみましょう。
私の環境ではWindows側のIPが192.168.1.21なので、 \\192.168.1.21\rails_win_share
でアクセスできました。
CentOS7側の設定
ここからはCentOS7側の設定です。
主にこちら を参考にしました。
やる事はCentOS7上のマウントディレクトリを作成し、
そのディレクトリにWindowsの共有フォルダのマウントを行うだけなのですが少し手順が必要です。
まず一般ユーザーでログイン後、linuxのuid , gidを調べましょう。
id <user名> # もし userという名前のユーザー名の場合は id user と入力。
すると下記のような結果が返ってきます。
この値を覚えておきましょう。
uid=1000(user) gid=1000(user) groups=1000(user)
次は実際にマウントを行います。
sudo yum install -y cifs-utils
mkdir /home/user/rails_win_share
sudo mount -t cifs -o username=<windowsのユーザー名>,password=<Windowsのパスワード>,uid=<CentOS7のユーザーのuid>,gid=<CentOS7のユーザーのgid>,nobrl //<windowsのIP>/rails_win_share /home/user/rails_win_share
Windows側のIPが192.168.1.21 , ユーザー名がwinusr , パスワードがwinpas、CentOS7側のuidとgidが1000だった場合は、
sudo mount -t cifs -o username=winusr,password=winpas,uid=1000,gid=1000,nobrl //192.168.1.21/rails_win_share /home/user/rails_win_share
になります。
ここでPermission denied(13)などが出る場合はコマンドやWindows側のパスワードなど間違っている箇所を探す必要がありますので、エラーが出た場合は各自調査をしてください。
またuidやgidが誤っている場合は、マウント先フォルダに書き込み権限がなくファイルの作成などが出来なくなる場合があります。
マウントが成功した場合はWindows側の共有フォルダにファイルを配置し、
CentOS7側のマウント先(例では /home/user/rails_win_share)にファイルが存在しているか確認しましょう。
[注意]
nobrlオプションは忘れないようにしてください。
sqlite3を使っている時にmigrate出来ない場合があります。
ここまでくれば、あとはCentOS7が起動する度に自動マウントするように設定するだけです。
sudo vim /etc/fstab
その後下記行を追加します。
//<windowsのIPアドレス>/rails_win_share /home/user/rails_win_share cifs username=<windowsのユーザー>,password=<windowsのパス>,uid=<linuxのユーザーのuid>,gid=<gid>,nobrl 0 0
ファイルを保存後、最後に再起動をします。
reboot
これで再起動後もマウントフォルダが見れるようになります。
あとはCentOS7側からWindowsの共有フォルダをマウントしたパスにRailsアプリケーションを作成すれば、Windows側でも見れるようになります。
お疲れさまでした。
以上がrdebug-ideの速度を上げる方法です。
もう少し効率の良い方法があればよいのですが筆者はそこまで知識がないのでもしよければアドバイスなどあればコメントお願いします。
また間違っている箇所などがあればご指摘下さい。