VM上で立ち上げたローカルホストをホストから見る方法
環境
ホスト:Windows8 64bit
ゲスト:(VirtualBox) CentOS6.7, Ruby on Rails
やりたいこと:
ゲストOSのRails上でlocalhostを立ち上げ、
ホストOSのブラウザで確認する。
手順:
VirtualBoxにネットワーク設定を2つ用意しておく。
① ブリッジアダプター
→ ゲストOSがホストOSと同じネットワークを使用するので、ゲスト側が外と繋がるために必要。
② ホストオンリー アダプター
→ ホストとゲストの間で通信する(外部に出ない通信)。
もしホストオンリーアダプターが立ち上がらなかったら、
コントロールパネル→ネットワークでvirtualboxのネットワークのプロパティを開き、NISC6が無効化(チェックなし)だったらチェックを入れて有効化する。
次にゲストOSを立ち上げてIPアドレスを確認。
ifconfig
eth1のアドレスをメモる。
恐らくローカルとグローバルアドレスとホスト通信の3つあると思われるが、
192.168.x.xのアドレスを使用する。
次にiptablesの設定を行い、ゲストOSのポートを開ける。
sudo vi /etc/sysconfig/iptables
Railsのサーバ(Webrick)の場合、3000番ポートを使用するので、3000番を開ける。
-A INPUT -p tcp -m tcp --dport 3000 -j ACCEPT
変更したら更新内容を反映させる。
iptables restart
次にwebrickを立ち上げる。
※事前にアプリがあると仮定
rails s -b 0.0.0.0
これでゲスト側はオッケー。
次にホストのブラウザを立ち上げ、最初に調べたIPアドレス:ポートを指定する。
確認できたらオッケー。
番外編:
FTPクライアントも入れたいという場合には、ここまでくれば設定はすぐできる。
たとえば、WinSCPの場合、設定のホスト名にゲスト側のIPアドレス、SFTPにしてゲストのユーザーでログインすればオッケー。
TODO: trace と ui test
Trace の使い方
TestContext.WriteLine メソッド
TestContext.WriteLine メソッド (Microsoft.VisualStudio.TestTools.UnitTesting)
と
Trace.WriteLineメソッド
Trace.WriteLine メソッド (System.Diagnostics)
の使い分けが分からない。
LINQメモ(左外部結合とNVL的なのとWHERE句)
左外部結合
DefaultIfEmptyメソッドを使う
var q = from item1 in Tbl_FOO.Where(p => a.CD_FOO == param) join item2 in Tbl_Hoge on a.CD_AAA equals item2.CD_AAA into a from item2 in a.DefaultIfEmpty()
WHERE句を足したいとき
select aaa from hoge left outer join foo on hoge.cd=foo.cd where foo.CD_NO=1
をLINQで表現すると
var q = from hoge in h join f in Foo.Where(x => x.CD_NO == 1) on new { cd } equals new { cd } into Z from f in Z.DefaultIfEmpty() select { aaa };
windowsでポートが使われててローカルサーバが立ち上がらなくなったとき
ポート番号指定もOK
> netstat -aon | find ポート番号
↓
TCP 127.0.0.1:ポート番号 0.0.0.0 LISTENING 番号
LISTENINGと出てたら倒しに行こう。
killするときはtaskkill
> taskkill /pid 上の番号
例)
> taskkill /pid 9016
成功: PID 9016 のプロセスに強制終了のシグナルを送信しました。
と言われたらOK