【问题标题】:Permission Denied with Grunt Compass使用 Grunt Compass 拒绝权限
【发布时间】:2014-12-14 03:09:14
【问题描述】:

我正在尝试运行 Grunt Compass 任务,但一直失败:

Errno::EACCES 在第 ["250"] 行 /opt/rubies/ruby-2.1.2/lib/ruby/2.1.0/fileutils.rb:权限被拒绝 @dir_s_mkdir - /样式表

我的任务是:

compass: {
  dev: {
    options: {
        require: ['susy', 'breakpoint'],
        sassDir: '<%= paths.srcAssets %>/stylesheets',
        cssDir: '<%= paths.build %>/stylesheets',
        generatedImagesDir: '<%= paths.build %>/images',
        imagesDir: '<%= paths.srcAssets %>/images',
        javascriptsDir: '<%= paths.srcAssets %>/javascripts',
        fontsDir: '<%= paths.srcAssets %>/fonts',
        // importPath: ['<%= paths.vendor %>/components'],
        httpImagesPath: '/assets/images',
        httpGeneratedImagesPath: '/assets/images',
        httpFontsPath: '/assets/fonts',
        sourcemap: true,
        relativeAssets: false,
        noLineComments: true,
        outputStyle: 'compressed',
        raw: 'preferred_syntax = :sass\n',
        environment: 'development',
        bundleExec: true,
        app: 'stand_alone',
        debugInfo: true,
        quiet: false,
        trace: true
    }
  }
},

我假设它失败了,因为它没有创建“样式表”目录的正确权限。

这在两个方面让我感到困惑:

  1. 我有另一个繁重的任务,它成功地在 Compass 尝试放置“样式表”的位置创建了一个“图像”目录。

  2. 我在 Vagrant 虚拟机中运行它,所以不确定父文件夹的权限应该是什么。

关于如何解决它的任何想法?

尼尔

【问题讨论】:

  • 如果您仍在处理此问题,我有几个问题: - 您是否以交互方式使用它,或者这是自动化 CI 流程的一部分? - 您是否尝试过手动创建“样式表”文件夹,至少检查这是否是唯一的问题? - grunt 是否在运行 compass 任务之前成功写出其他文件并创建其他文件夹?
  • 感谢您的回复。以为没人会帮忙。非常感谢。我正在交互工作。我尝试制作文件夹,但仍然失败。我会尽快测试您的最后一点并尽快回复您。
  • @JamesWing 你说得对,尝试使用复制任务复制文件,但在尝试创建“图像”目录时失败。有什么想法吗?
  • 它确实表明存在一般权限问题。您对 VM 有管理员权限吗?我也不确定权限应该是什么,我建议从 Gruntfile 中的输出文件夹 开始进行有限的更改。像chmod -v -v -R u+w outputFolderName 这样的东西会递归地给你写权限,并列出修改过的文件。
  • 好的,我试试看。不过,在我这样做之前,如果我通过 VM 更改权限,这是否也在我的本地计算机上更改它们?这也让我很困惑。

标签: gruntjs compass-sass mkdir permission-denied


【解决方案1】:

问题是罗盘试图在你系统的/创建stylesheets目录,这显然是被禁止的。

此问题是由您在 compass 任务中为 cssDirimageDir 选项引用的路径引起的:

cssDir: '<%= paths.build %>/stylesheets'

在您的paths 配置对象中,没有build 属性,但肯定有一个buildAssets,所以&lt;%= paths.build %&gt; 被替换为null 并解释您的错误。

所以只需替换出现的位置,你就可以开始了。

【讨论】:

  • 别这么叫你,我们都会犯错:)
  • 当我运行 grunt stylesheets 时,我现在得到: grunt stylesheets Running "clean:all" (clean) task >> 0 个路径已清理。运行“copy:images”(复制)任务警告:无法创建目录“/vagrant/rails/public/assets”(错误代码:EEXIST)。使用 --force 继续。我在 Gist 上更新了我的 Gruntfile:gist.github.com/rctneil/4ecbdf6a2dbd6b2f4778 有什么想法吗?
  • 您可以使用清理任务的force 选项在清理时删除文件夹或使用指南针之一覆盖文件
  • 您现在能检查一下要点吗,因为我在与 --force 一起使用时添加了控制台输出。我越来越困惑为什么这一切都出错了。我在运行 grunt 之前检查,设置为 buildAssets 的资产目录完全为空。要点是:gist.github.com/rctneil/4ecbdf6a2dbd6b2f4778 谢谢
  • 您应该将罗盘的force 选项设置为true,而不使用--force 标志
猜你喜欢
  • 2014-04-30
  • 2014-08-22
  • 2015-04-03
  • 2020-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-29
  • 1970-01-01
相关资源
最近更新 更多