使用AWS OpsWorks的sudo权限,在`before_migrate.rb`中运行命令

时间:2016-09-27 00:25:33

标签: javascript ruby-on-rails gulp chef aws-opsworks

在我的Rails应用程序中,我尝试在部署期间运行gulp任务,这会将css文件添加到public目录中的目录中。在部署日志中,我看到任务成功运行,但是当我SSH到服务器时,我看不到该文件。

[2016-09-24T01:35:02+00:00] INFO: Processing execute[create critical css] action run   (/srv/www/toaster/releases/20160924013146/deploy/before_migrate.rb line 43)
[2016-09-24T01:35:03+00:00] INFO: execute[create critical css] ran successfully

当我通过SSH连接到服务器并使用sudo su deploy将我的用户更改为部署用户,然后运行gulp任务时,文件将被创建。

我做错了什么?

before_migrate中的行看起来像这样......

execute 'create critical css' do
  user 'deploy'
  cwd release_path
  command 'gulp criticalCss'
end

我的gulpfile中的任务看起来像这样......

gulp.task('criticalCss', function() {
  glob('./public/assets/theme_templates/v3/application-*.css', function(err, matches) {
    var full_css = matches[0]

    penthouse({
      url : 'http://performance-site.s2.fanbread.com/blogs/performance-benchmark',
      css : full_css,
      width: 375,
      height: 667
    }, function(err, criticalCss) {
      console.log(err)
      fs.writeFile('./public/assets/theme_templates/v3/posts_show.css', criticalCss); // Write the contents to a jekyll include
    });
  });
});

由于

1 个答案:

答案 0 :(得分:1)

Chef的常用解决方案是将日志级别调高到DEBUG以查看命令输出。不知道你如何使用当前的Opsworks做到这一点。大多数情况下,这些问题要么与$HOME未设置的环境变量相关,要么gulp未正确找到。

作为旁注,我不建议再使用deploy资源。普通的git资源可能更好。有关使用Chef进行更现代的Rails部署的示例,请参阅我的application_examples食谱。