如何通过 SFTP 设置自动原子传输

如何通过 SFTP 设置自动原子传输

我正在做一个个人项目。由于我不必担心与他人合作或从开发环境部署到生产环境,所以我只是在为我的应用程序提供服务的服务器上修改文件。

为此,我使用 Panic 的 Transmit (https://panic.com/transmit/),一个 FTP/SFTP 客户端。让我高兴的是,它提供了 FUSE 功能,因此我可以将服务器的文件系统挂载到本地文件系统上。我在文本编辑器中进行更改,这些更改会被保存,并自动上传。

但我的文件还需要 Gulp 处理(http://gulpjs.com/) 在服务器上。这部分也有效。Gulp 监视文件,如果文件发生变化,它会处理它们。

不幸的是,这两件事不能很好地协同工作。当我进行更改时,我最终得到的是一个空文件,而我期望的是新处理的文件。

我的假设是 Transmit 没有自动传输我的文件。而且它似乎没有提供这样做的选项。在 Transmit 有机会上传其内容之前,Gulp 就看到了文件更改,因此我得到的是空文件。

我的问题是,我该怎么做才能解决这个问题?我希望尽可能地接近我当前的工具链,但我也愿意接受全新的方法来实现这一点。

谢谢!

答案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']);
});

相关内容