仮想環境内のLinuxで作ったRailsの初期画面をMacのブラウザで見られない

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 1,431

anvinon

score 36

開発環境

  • ホストOS MacOS X 10.11 El Capitan
  • ゲストOS CentOS 7.0
  • Vagrant 1.8.5
  • Ruby 2.2.5
  • Ruby on Rails 4.2.7.1
    *RubyとRuby on Railsは、2つともバージョンを揃えて念の為にホストOSとゲストOS両方にインストール済み

実現したいこと

MacとVagrantで管理しているVMの共有ディレクトリでWebアプリ開発(実際の開発は、Mac上のAtomで行う)を行い、Webアプリを走らせるのはVM上で、動作確認はMacのブラウザで行うための環境を構築したい。

発生している問題・エラーメッセージ

上記の通り、環境構築中なのですが(まだ実際の開発に入れていない)、最後の「試しにサンプルプログラムをrails newコマンドを打って確認」をしたところでつまづいてしまいました。初期画面を見ることが出来ません。

なお、私が指す初期画面とは、こちらです。
初期画面

試したことその1

まず、
#07 Webページを表示させてみよう | Vagrant入門 - プログラミングならドットインストール
の通り共有ディレクトリのVagrantfileを編集して、以下の部分のコメントを外しました。

config.vm.network :private_network, ip: "192.168.33.10"

この作業で、VM上のCentOSの /var/www/html に簡単なindex.htmlを作って配置するとちゃんとhttp://192.168.33.10で見ることができています(ポートの指定は特にしていません)。

しかし、こちらのサイトの通り設定しても見ることが出来ていません。具体的には、以下のとおりです。

試したことその2

  1. 再びVagrantfileの設定を行う
    config.vm.network "forwarded_port", guest: 3000, host: 3000
    を加えました。現時点でのVagrantfileの中身は以下のとおりです。
# -*- mode: ruby -*-
# vi: set ft=ruby :

# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|
  # The most common configuration options are documented and commented below.
  # For a complete reference, please see the online documentation at
  # https://docs.vagrantup.com.

  # Every Vagrant development environment requires a box. You can search for
  # boxes at https://atlas.hashicorp.com/search.
  config.vm.box = "centos70"

  # Disable automatic box update checking. If you disable this, then
  # boxes will only be checked for updates when the user runs
  # `vagrant box outdated`. This is not recommended.
  # config.vm.box_check_update = false

  # 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: 3000, host: 3000

  # 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"

  # Create a public network, which generally matched to bridged network.
  # Bridged networks make the machine appear as another physical device on
  # your network.
  # config.vm.network "public_network"

  # Share an additional folder to the guest VM. The first argument is
  # the path on the host to the actual folder. The second argument is
  # the path on the guest to mount the folder. And the optional third
  # argument is a set of non-required options.
  # config.vm.synced_folder "../data", "/vagrant_data"

  # Provider-specific configuration so you can fine-tune various
  # backing providers for Vagrant. These expose provider-specific options.
  # Example for VirtualBox:
  #
  # config.vm.provider "virtualbox" do |vb|
  #   # Display the VirtualBox GUI when booting the machine
  #   vb.gui = true
  #
  #   # Customize the amount of memory on the VM:
  #   vb.memory = "1024"
  # end
  #
  # View the documentation for the provider you are using for more
  # information on available options.

  # Define a Vagrant Push strategy for pushing to Atlas. Other push strategies
  # such as FTP and Heroku are also available. See the documentation at
  # https://docs.vagrantup.com/v2/push/atlas.html for more information.
  # config.push.define "atlas" do |push|
  #   push.app = "YOUR_ATLAS_USERNAME/YOUR_APPLICATION_NAME"
  # end

  # Enable provisioning with a shell script. Additional provisioners such as
  # Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
  # documentation for more information about their specific syntax and use.
  # config.vm.provision "shell", inline: <<-SHELL
  #   apt-get update
  #   apt-get install -y apache2
  # SHELL
end
  1. ファイアーウォールの設定

上記のサイトでは、iptablesの設定を行っていますが、CentOS 7.0をVM内で使っているということもあり、以下のとおりに設定してあります。

[vagrant@localhost ~]$ sudo systemctl is-enabled firewalld
disabled

以上の状態で、

[vagrant@localhost html]$ rails new work
[vagrant@localhost html]$ cd work
[vagrant@localhost html]$ rails s


(* なお、/vagrantと/var/www/html にはシンボリックリンクをはってあります)
と打ち、いざhttp://localhost:3000/worksを開いても、
エラー状態

となってしまいます。ポートか、URLが間違っているのでしょうか?どなたか解決策をご存知のかた、ご教示いただければ幸いです。どうぞ宜しくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

rails実行を以下のようにしてみてはどうでしょうか。

$ rails s -b 192.168.33.10

または

$ rails s -b 0

バインドアドレスを指定しないと127.0.0.1にバインドされるため、rails実行マシン上からlocalhost:3000にしかアクセスできない状態となります。

【補足】

forwarded_portの設定があるのでMac上のlocalhost:3000へのアクセスは仮想マシンにフォワードされますが、フォワード先が192.168.33.10:3000となって、仮想マシン上のlocalhost:3000にはアクセスできないと考えられます。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/11 17:27

    ご回答有り難うございます。

    早速、
    $ rails s -b 192.168.33.10
    を試したところ、初期画面を見ることが出来ました!ありがとうございます!!
    途方に暮れていたので本当にありがたいです。

    環境構築中に -b のオプションは見かけたので、なんのことだろうと思っていました。ただ、検索してみても、検索の仕方が悪かったのか、うまく求める答えが見つからなかったのでそのまま次のステップに進んでしまいました。まさか、こういう意味だったのは・・・。「バインド」という単語の意味がわからないので、この後検索してみます。

    ありがとうございました。

    キャンセル

  • 2016/09/11 19:41

    さきほどはありがとうございました。もう一つ質問があるので、もしよろしければご回答いただけますと幸いです。

    今回は、バインドして接続ができましたが、今後もこのまま(http://192.168.33.10:3000のまま)で開発を続けても大丈夫でしょうか?もし、http://localhost:3000に変更したほうが良ければ、設定方法を教えていただきたいのですが・・・。以下、自分で変更を試した方法ですが、http://localhost:3000では初期画面が表示されませんでした。


    vagrantfileの
    config.vm.network "private_network", ip: "192.168.33.10"
    こちらを
    config.vm.network "private_network", ip: "localhost"
    もしくは
    config.vm.network "private_network", ip: "127.0.0.1"
    に設定してみました。結果は初期画面が表示されませんでした。

    もしよろしければご回答いただけますと幸いです。よろしくお願いいたします。

    キャンセル

0

http://192.168.33.10:3000 はどうですか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/11 17:22

    度々のご回答、恐れ入ります。また、ありがとうございます。
    以下の結果になりました。

    [vagrant@localhost work]$ wget http://localhost:3000
    --2016-09-11 10:12:23-- http://localhost:3000/
    localhost (localhost) をDNSに問いあわせています... ::1, 127.0.0.1
    localhost (localhost)|::1|:3000 に接続しています... 失敗しました: 接続を拒否されました.
    localhost (localhost)|127.0.0.1|:3000 に接続しています... 失敗しました: 接続を拒否されました.

    次の一手は、ファイアーウォールの設定ミスかな、と思いファイアーウォールについて検索しようと思っていたところ、tkmtmkt様の方法で無事起動できました。
    ここまでお付き合いいただき、誠にありがとうございました!!

    キャンセル

  • 2016/09/11 19:03

    解決済みのためどうでもいいかもしれませんが、上記コマンドで接続失敗は通常であれば考えられないので、「rails s」を実行していない状態で上記コマンドを実行したと推測されますがどうでしょう?

    上記コマンドは「そもそもきちんとWEBアクセスできる状態でプログラム動いているのか?」を確認しているものなので、プログラムを動かしていない状態で実行したら失敗するのは正常な動作です。

    上記コマンドはプログラムを動かしているターミナルとは別のターミナルを開いてから、仮想マシンに接続して実行するものです。

    どこまで説明すべきなのか考えるのはなかなか難しいものであるなと思ってしまいました。

    キャンセル

  • 2016/09/11 19:26

    WEBのエンジニアになろうとしているので、ネットワークの知識は欠かせないと思いますし、ご指摘ありがとうございます。
    まず、バインドさせずに、

    [vagrant@localhost work]$ rails s
    => Booting WEBrick
    => Rails 4.2.7.1 application starting in development on http://localhost:3000
    => Run `rails server -h` for more startup options
    => Ctrl-C to shutdown server
    [2016-09-11 12:10:53] INFO WEBrick 1.3.1
    [2016-09-11 12:10:53] INFO ruby 2.2.5 (2016-04-26) [x86_64-linux]
    [2016-09-11 12:10:53] INFO WEBrick::HTTPServer#start: pid=5231 port=3000

    の状態にし、ターミナルの別のタブ(タブ式のターミナルをダウンロードしました)を立ち上げ、もう一度試してみました。

    [vagrant@localhost work]$ wget http://localhost:3000
    --2016-09-11 12:11:25-- http://localhost:3000/
    localhost (localhost) をDNSに問いあわせています... ::1, 127.0.0.1
    localhost (localhost)|::1|:3000 に接続しています... 接続しました。
    HTTP による接続要求を送信しました、応答を待っています... 200 OK
    長さ: 14935 (15K) [text/html]
    `index.html.1' に保存中

    100%[==================================================================================================================================================================>] 14,935 --.-K/s 時間 0.001s

    2016-09-11 12:11:26 (22.8 MB/s) - `index.html.1' へ保存完了 [14935/14935]

    無事に通りました! tkmtmkt様のご指摘のとおりでした。ありがとうございます。もう一つ質問があるので、もしよろしければご回答頂ければ幸いです。頂いたご回答のコメントをつけさせて頂きます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.22%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる