大まかな流れ
Vagrantの中にRails環境を導入
↓
Mysql,Railsの導入はできた
↓
いざRailsを走らす
↓
ローカル環境ではアクセスすることができたが,ホストOSでのブラウザ接続が出来なかった← これが問題
※環境構築について:Vagrant 1.8 + CentOS 7 + VirtualBox 5 + Ruby on Rails + Mysqlで開発環境構築を参照しながら行いました.(すごくわかりやすい説明でやりやすかったです.)
問題点について
- Railsが動いているにもかかわらずローカルのみで動き,ホストサーバに接続できなかった.
解決方法
行った解決方法①
Railsの起動方法を変えてみた.
Rails var4.2以降では通常の起動ではローカルのみの起動となってしまうので
オプションで -b
とIPアドレス(基本的に0.0.0.0)
rails s -b 0.0.0.0
ダメでした...
原因
そもそも3000番ポートが空いてなかった.
行った解決方法②
VagrantFileを書き換えてみる.
まずゲストの3000番ポートとホストの3000番ポートを開くように設定ファイルをvagrantfileを編集する.
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
# config.vm.network "forwarded_port", guest: 80, host: 8080
#以下にこの文章を付け足す
config.vm.network :forwarded_port, guest: 3000, host: 3000
次にVagrantfile に適当なIPアドレスの割り当て設定をしてみる.
# Create a private network, which allows host-only access to the machine
# using a specific IP.
#以下にこの文章を付け足す
config.vm.network :private_network, ip: "192.168.33.10"
Vagrantfileを編集したあとvagrant reload
で設定を読み込む`
参考サイト:Vagrantの仮想環境でrails serverで動いているアプリケーションにMacのブラウザからアクセスしてみる
ダメでした...
サイトで調べてみると,ほとんどの人がここまででちゃんとホスト側のブラウザからアクセスできているみたいです...
行った解決方法③
サイトを次々調べていくうちに1つだけ違った方法があったので紹介.
Firewalld(iptablesのCentOS7用)をオフにする.
vagrant ssh内で
$ sudo systemctl stop firewalld.service
# firewalld を無効にする
$ sudo systemctl mask firewalld.service
$ sudo systemctl list-unit-files | grep firewalld
# OS 起動時もfirewalldが起動しないようにする
を実行し,Railsを走らせる...
参考サイト:開発のわだち(3):自分の開発環境を作る【2】
!!!!
ついにホストのブラウザからサーバアクセすることが出来ました!
解決方法①と解決方法②,解決方法③を組み合わせることでサーバアクセスが出来ました.
おしまい.