Solucionado (ver solução)
Solucionado
(ver solução)
14
respostas

brownsersync com servidor iis

Olá,

Tenho um projeto em laravel 4.2 rodando em um servidor IIS. Gostaria de rodar o script abaixo para evitar ficar dando reload na pagina. Mas não esta funcionando. Alguem saberia me dizer o porque ?

O endereço do servidor é localhost:8084

gulp.task('server', function(){
    gulp.task('server', function() {
        browserSync.init({
            server: {
                baseDir: 'projeto'
            }
        });
    });

    gulp.watch('projeto/public/js/*.js').on('change', function(event){
        gulp.src(event.path)
            .pipe(jshint())
            .pipe(jshint.reporter(jshintStylish));
    });

    gulp.watch('projeto/public/css/*.css').on('change', function(event){
        gulp.src(event.path)
            .pipe(cssLint())
            .pipe(cssLint.reporter());
    });

    gulp.watch('projeto/public/less/**/*.less').on('change', function(event) {
        var stream = gulp.src(event.path)
            .pipe(less().on('error', function(erro) {
            console.log('LESS, erro compilação: ' + erro.filename);
            console.log(erro.message);
            }))
            .pipe(gulp.dest('projeto/public/css'));
    });
    gulp.watch('projeto/**/*').on('change', browserSync.reload);
});
14 respostas

Bom dia. Você não fez a configuração do proxy que ensino em

https://cursos.alura.com.br/course/gulp/task/12357

Você definiu o baseDir apenas, por isso não funciona.

// falta configuração do proxy
browserSync.init({
            server: {
                baseDir: 'projeto'
            }
        });

Sucesso e bom estudo.

Olá Flávio,

Desculpe, na verdade eu coloquei o código daqui errado, eu ja havia colocado o código abaixo. Tentei das duas formas abaixo

proxy: 'localhost:8084' 
proxy: 'localhost:3000'

Mas quando abre o servidor exibe a mensagem: Cannot GET /

O endereço do proxy deve ser o endereço do seu servidor laravel, inclusive a porta. Quando você faz isso, não acessará mais sua aplicação pelo browser no endereço orignal, quando o browserync abrir seu navegador, geralmente ele soma mais uma à porta.

Por exemplo, se o seu servidor esta rodando em proxy: 'localhost:8080', você o acessará através de localhost:8081. Isto é, você estará passando pelo proxy criando pelo browsersync para ele detectar as mudanças que direcionará para seu servidor original.

Essa explicação ajudou? Qualquer coisa volte aqui.

Entendi sim, mas o que percebi é que mesmo colocando o endereço do meu servidor iis ele continua abrindo no localhost:3000

Faça o seguinte, pega o seu script com a última alteração que você fez do proxy e cola aqui. É importante que no endereço do proxy seja o endereço local do seu servidor.

Assim eu vejo se tem alguma coisa diferente. Já vi alguns alunos com dificuldades justamente com laravel e IIS.

Você tem dois endereços, certo? O do ISS e do Laravel acessado por trás do ISS, né?

O endereço que esta no proxy é exatamente o que é aberto pelo iss, e a unica forma de que acesso esse projeto é pelo iis mesmo. Mas se eu levantar o servidor do proprio laravel provavelmente ira acessar

gulp.task('server', function(){
    gulp.task('server', function() {
        browserSync.init({
            server: {
                proxy: 'http://localhost:8084/'
            }
        });
    });

    gulp.watch('projeto/public/js/*.js').on('change', function(event){
        gulp.src(event.path)
            .pipe(jshint())
            .pipe(jshint.reporter(jshintStylish));
    });

    gulp.watch('projeto/public/css/*.css').on('change', function(event){
        gulp.src(event.path)
            .pipe(cssLint())
            .pipe(cssLint.reporter());
    });

    gulp.watch('projeto/public/less/**/*.less').on('change', function(event) {
        var stream = gulp.src(event.path)
            .pipe(less().on('error', function(erro) {
            console.log('LESS, erro compilação: ' + erro.filename);
            console.log(erro.message);
            }))
            .pipe(gulp.dest('projeto/public/css'));
    });
    gulp.watch('projeto/**/*').on('change', browserSync.reload);
});

Vocês acham que o grunt seria uma melhor opção? Nesse projeto em questão não sei se é pq ainda sou nova com o gulp, mas estou tendo bastante problemas para poder fazer funcionar tudo o que eu vi no curso e me falaram desse grunt, mas tambem não conheço.

Não acho que o Grunt seja a uma melhor opção. Aliás, o caminho natural é migrarem do Grunt para o Gulp e não o contrário.

Seu browserSync esta abrindo o navegador automaticamente para você? (preciso dessa resposta). Quando ele abre, ele abre uma URL diferente, geralmente somando 1 à porta original, por exemplo, proxy: http://localhost:8085/.

Se você ir para o Grunt continuará com o mesmo problema, sendo assim, vale a pena investir na solução já com o Gulp.

Hmmm, entendi, bom saber!!!

Com o código que mandei acima mesmo com o proxy configurado ele abre na porta 3000 padrão.

Em um outro forum aqui da alura colocaram de uma forma diferente e eu tentei:

browserSync.init({
            host: 'localhost',
            proxy: 'localhost:8084',
            port: 8085
        });

Com esse código ele abriu corretamente na 8085, só que mostra um erro no iis

Erro HTTP 401.2 - Unauthorized Você não tem autorização para exibir esta página devido a cabeçalhos de autenticação inválidos.

Vixe! Não sei o que pode ser. Há algum sistema de autenticação na sua APP? Tenta o seguinte, no lugar de colocar o endereço do IIS, tenta colocar o endereço do servidor laravel.

Em teoria, a primeira forma deveria funcionar.

solução!

Me deu um estalo aqui! Quando você desenvolve em Laravel, não precisa do ISS, certo? O ISS é quando você for colocar em produção, certo? Nesse caso, o browserSYNC é feito para ambiente de desenvolvimento apenas, jamais para produção. Acho que ele esta se perdendo quando você tenta usar o Laravel através do ISS. Faz sentido o que eu te falei?

Putz, verdade!!!

Fiz um teste aqui e deu certo o/

Mas deu um problema com a autenticação do projeto. Tem alguma configuração do laravel que possa ajudar nisso?

if($isKerberos){
            switch ($server) {
                case isset($server['REMOTE_USER']):
                    $adUser = $server['REMOTE_USER'];
                    break;
                case isset($server['LOGON_USER']):
                    $adUser = $server['LOGON_USER'];
                    break;
                case isset($server['AUTH_USER']):
                    $adUser = $server['AUTH_USER'];
                    break;
                }

            if ($adUser) {
                $adUser = explode('\\', $adUser);
                $adUser = $adUser[count($adUser) - 1];
            }
 }

Eu não sei dizer, não manjo muito do Laravel. Porém, se você setar uma flag em ambiente de produção e assumir um usuário autenticado não resolve?

Acredito que sim, vou dar mais uma investigada e qualquer coisa uso essa solução mesmo.

Obrigado pela Ajuda Flávio.