Homestead nginx обслуживает контент из символической ссылки, сгенерированной через gulpfile и vinyl-fs

В моем проекте на Symfony я управляю своими активами внешнего интерфейса, используя следующий gulpfile.js:

var gulp = require('gulp');
var rename = require('gulp-rename');
var vfs = require('vinyl-fs');

/**
* Location where to store the 3rd party libraries
*/
var frontend_folder = "./frontend"
var vendor_folder=`${frontend_folder}/vendor`
var frontent_dev_folder_js=`${frontend_folder}/js`
var frontent_dev_folder_js=`${frontend_folder}/css`

/*################################### Installing Dependencies ###############################*/

//Move Bootstrap
gulp.task('move_bootstrap',function(done){

  var bootstrap_dir='./node_modules/bootstrap/dist';
  var dest=`${vendor_folder}/bootstrap`;

  var css_files=[`${bootstrap_dir}/css/bootstrap.min.css`,`${bootstrap_dir}/css/bootstrap.min.css.map`];
  var js_files=[`${bootstrap_dir}/js/bootstrap.bundle.min.js`,`${bootstrap_dir}/js/bootstrap.bundle.min.js.map`];

  gulp.src(css_files).pipe(gulp.dest(`${dest}/css`));
  gulp.src(js_files).pipe(gulp.dest(`${dest}/js`));

  done();
})

//Jquery & miscellanous Javascript move
gulp.task('move_jquery',function(done){
  var jqueryFiles=['./node_modules/jquery/dist/jquery.min.js'];
  gulp.src(jqueryFiles).pipe(gulp.dest(vendor_folder));

  done();
});

//For fontawesome
gulp.task('move_fontawesome',function(done){
  var path='./node_modules/font-awesome';
  var dest=vendor_folder+'/font-awesome';

  gulp.src(path+'/fonts/*').pipe(gulp.dest(dest+'/fonts'));
  gulp.src(path+'/css/font-awesome.min.css').pipe(gulp.dest(dest+'/css'));
  done();
});


/******* Build Final Steps ****************************************************/

gulp.task('link_assets',function(done){

  vfs.src(frontend_folder+'/*', {followSymlinks: false})
        .pipe(vfs.symlink('./web/assets/'));

  return done();
});

/* ############################################ Installing Dependencies ##################################### */

gulp.task('move_frontend', gulp.series(['move_bootstrap','move_jquery','move_fontawesome'],(done)=>{done()}));
gulp.task('dev',gulp.series(['move_frontend','link_assets'],(done)=>{done();}));

gulp.task('default',gulp.series(['dev'],(done)=>{done()}));

Существует задача, которая генерирует символические ссылки для любого содержимого, которое существует в папке, расположенной в моем корень проекта с именем frontend, в папку на ./web/assets. Другими словами, корень моего проекта:

-
-- frontend
...
-- web
---assets
---- ^any folder located in frontedn symlinked here^

Кроме того, я помещаю в config.yml следующую конфигурацию ресурсов:

framework:
...
    assets:
        packages:
            vendor:
                base_path: '/assets/vendor'

И я пытаюсь заставить свой nginx обслуживать контент, связанный с символическими ссылками (используемый для целей разработки), а пока я попытался разместить следующие настройки (на основе документация nginx):

location ~ /web/assets {
    disable_symlinks off;
    root /home/vagrant/code/web/assets;
}

Но когда я посещаю актив, например http://192.168.10.10/assets/vendor/bootstrap/css/bootstrap.min.css, я получаю ошибку 404. Для разработки я использую бродячий образ с усадьбой и запускаю задачи gulp вне бродяги.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
0
70
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

For development I use the the homestead vagrant image and i run the gulp tasks outside the vagrant.

Это проблема! Символические ссылки за пределами vagrant отображаются с использованием полных путей, другими словами, ваша символическая ссылка указывает на несуществующую папку, поэтому nginx, когда следует по символической ссылке, посещает несуществующий файл и, как и ожидалось, не обслуживает контент.

Поэтому я бы посоветовал посетить через ssh работающую виртуальную машину:

vagrant ssh

Затем перейдите в папку ~/code

cd ~/code

Удалить символическую ссылку

rm -rf ./web/assets/*

И перезапустите задачи gulp

gulp

Это решит любую вашу проблему.

Другие вопросы по теме