Как настроить автоматическую атомную передачу по SFTP

Я работаю над личным проектом. Поскольку мне не нужно беспокоиться о работе с другими или развертывании из среды разработки в производственную среду, я просто изменяю файлы на сервере, на котором я обслуживаю свое приложение.

Для этого я использую Transmit от Panic ( https://panic.com/transmit/), клиент FTP/SFTP. К счастью для меня, он предлагает возможности FUSE, поэтому я могу смонтировать файловую систему моего сервера на мою локальную файловую систему. Я делаю изменения в своем текстовом редакторе, они сохраняются, они загружаются автоматически.

Но мои файлы также должны быть обработаны Gulp ( http://gulpjs.com/) на сервере. Эта часть также работает. Gulp просматривает файлы и, если они меняются, обрабатывает их.

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

Моя гипотеза состоит в том, что Transmit не передает мои файлы атомарно. И это, кажется, не дает возможности сделать это. Gulp видит изменения файлов до того, как Transmit сможет загрузить их содержимое, поэтому я получаю пустые файлы.

У меня вопрос, что я могу сделать, чтобы справиться с этим? Я бы предпочел оставаться как можно ближе к моей нынешней цепочке инструментов, но я также открыт для совершенно новых способов достижения этой цели.

Спасибо!

1 ответ

Оказывается, что атомарность при передаче файлов могла быть только половиной проблемы. То есть одна вещь, которую я сделал перед публикацией здесь, состояла в том, чтобы убедиться, что мой текстовый редактор был атомарным. Не было, но проблема сохранялась даже после того, как я это исправил.

Другая половина была правами доступа к файлам. Gulp создавал файл с слишком ограниченными правами доступа. Это было исправлено моим gulp-chmod ( https://www.npmjs.com/package/gulp-chmod). Вот то, что моя работа gulpfile.js похоже:

var gulp = require('gulp');
var $ = require('gulp-load-plugins')();

var sassPaths = [
  'bower_components/normalize.scss/sass',
  'bower_components/foundation-sites/scss',
  'bower_components/motion-ui/src'
];

gulp.task('sass', function() {
  return gulp.src('scss/styles.scss')
    .pipe($.sass({
      includePaths: sassPaths,
      outputStyle: 'nested'
    })
      .on('error', $.sass.logError))
    .pipe($.autoprefixer({
      browsers: ['last 2 versions', 'ie >= 9']
    }))
    .pipe($.chmod(0o644))
    .pipe(gulp.dest('static/css'));
});

gulp.task('default', ['sass'], function() {
  gulp.watch(['scss/**/*.scss'], ['sass']);
});
Другие вопросы по тегам