質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Vagrant

Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

Q&A

解決済

2回答

4919閲覧

vagrantのサーバー上でbrowser-syncを動作させたい

t-book

総合スコア29

Vagrant

Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

0グッド

2クリップ

投稿2015/02/18 05:07

はじめまして!以下、投稿させていただきます。

■やりたいこと
ローカルでファイルを修正し、vagrant側のサーバー上でその更新を感知してライブリロードさせたい
※修正ファイルはhtml, css, js, phpなどフロントに関するものです

■環境など
□ローカル側
・デスクトップPC(windows7)
・Desktop/.../vagrant/build/

□vagrant側
・Webサーバーを用意(centos+apache)
・192.168.33.10でブラウザ、sftpアクセス可能
・/var/www/html/public_html/
※public_html→ドキュメントルート

■やろうとしている手順

  1. ローカルでgulpを使用し、公開ファイルを/build/以下に出力する
  2. そのままgulp-sftpで、vagrant(192.168.33.10)の.../public_html/へ一式ファイルアップロードする
  3. /var/www/html/public_htmlと同じ並びにgulpを用意し、gulpを使ってbrowser-syncを使用できるようにする
  4. gulpで/public_html/以下のファイルを監視し、更新があればbrowser-syncを発動させる
  5. ブラウザで192.168.33.10へアクセスし、ライブリロードを確認する

■困っていること■
上記4までは上手く行っているようなのですが、肝心のブラウザでのライブリロードを確認することができません。
※gulpのログ(vagrant ssh > gulp)には、変更に応じてReloading Browsers...と表示はされていきます


<質問1:>
自分ではゲストOS/ホストOSのネットワーク周りの設定が不足しているのかなと思いはしますが、あまりその方面の知識が無いため、何をどう確認・設定してよいか検討が付きません。なにか怪しそうなところ、お分かりになりそうなことはありますでしょうか。。。

<質問2:>
やりたい動作が確認できていないのにアレですが、sftpでファイルを一括で送ると、かなりのファイル数が変更された!と見なされるかと思います。その度browserSyncが発動すると処理が重くなるのかとの心配もあります。ファイル送信が全て終わったらそこで1回のみreloadを実行する、もしくはreloadは連続して実行はさせない、といった処理は可能なものでしょうか。

どうぞよろしくお願いいたします。

なお実行しているgulpfile.jsは以下の様なものです

lang

1var gulp = require("gulp"); 2var browserSync = require('browser-sync'); 3var reload = browserSync.reload; 4 5gulp.task('browser-sync', function() { 6 browserSync({ 7 server: { 8 baseDir: "./public_html/" 9 } 10 }); 11}); 12 13gulp.task('bs-reload', function () { 14 browserSync.reload(); 15}); 16 17gulp.task('default',['browser-sync'], function() { 18 gulp.watch("./public_html/**/*", ['bs-reload']); 19});

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

自己解決したのでメモしておきます。

■質問1: vagrant上でライブリロードを実現させる

lang

1gulp.task("server", function() { 2 browserSync.init({ 3 host: "192.168.33.10", 4 open: false 5 }); 6});

上記実行すると、browser-sync-client.xxx.jsを読み込めと言われるので
素直にhtmlに提示されたスクリプトを追加

■質問2: 連続して発生する処理の負荷を抑えたい

setTimeoutを使って連続処理を間引く

lang

1gulp.task("watch", function() { 2 var timer; 3 gulp.watch('監視するファイル').on("change", function() { 4 clearTimeout(timer); 5 timer = setTimeout(function () { 6 // リロード処理 7 }, 200); 8 }); 9});

参考
http://webamb.com/javascript/1275.html

投稿2015/04/28 09:29

編集2015/04/28 09:30
t-book

総合スコア29

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

vagrantの共有フォルダの設定で
ホストOSのbuildフォルダが
ゲストOSのpublic_htmlになるように設定し、
browserSyncでproxyの設定をすればご希望の動作をするのではないかと思います。

投稿2015/02/18 12:03

toru81

総合スコア170

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t-book

2015/02/18 12:43

回答ありがとうございます! すみません、情報が不十分でした。 vagrantの共有フォルダはかなり遅く処理に時間が掛かってしまい、今回のケースでは使い物にならなかったため、このようなsftpで送る方法を取りました。 またvagrant1.5から使えるrsync-autoも試してみましたが(わざわざwindowsPCにrsyncをインストールしました...)、以下事情により断念しました。   ・現状rsyncはホスト→ゲストの一方通行   ・/public_html/中にサーバーから"も"出力されるファイルが入ってくる   ・ローカルと同期されると、ファイルが消えてしまう   →\(^o^)/ またbrowserSyncのproxyオプションも試してみましたが(sftpの場合でですが) 上手く動作しませんでした。 proxy : '192.168.33.10' // この記述が間違っているのかもしれませんが... どうぞよろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問