我刚刚将项目文件迁移到D:
驱动器上的新PC上,而我的程序(Git,Node Js,Ruby等)位于C:
驱动器上。
我在编辑SASS文件后尝试运行compass watch
,但遇到此错误:
Errno::EACCES on line ["897"] of C: Permission denied - <D:/project_dir/stylesheets/app.css20140323-10532-gziux, D:/project_dir/stylesheets/app.css>
Run with --trace to see the full backtrace
我在命令行使用Ruby是一个新手(因为我只将它用于Web开发目的)。我需要做什么才能允许权限?
如果我能提供更多信息,请告诉我。
编辑:
以下是运行compass watch --trace
后返回的内容:
D:\project_dir>compass watch --trace
>>> Change detected at 21:53:53 to: app.scss
overwrite stylesheets/app.css
Errno::EACCES on line ["897"] of C: Permission denied - (D:/project_dir/stylesheets/app.css20140323-14712-11v62k7, D:/project_dir/stylesheets/app.css)
C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/sass-3.2.18/lib/sass/util.rb:897:in `atomic_create_and_write_file'
C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/compass-0.12.4/lib/compass/actions.rb:58:in `write_file'
C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/compass-0.12.4/lib/compass/compiler.rb:143:in `compile'
C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/compass-0.12.4/lib/compass/compiler.rb:118:in `compile_if_required'
C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/compass-0.12.4/lib/compass/compiler.rb:103:in `block (2 levels) in run'
C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/compass-0.12.4/lib/compass/compiler.rb:101:in `each'
C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/compass-0.12.4/lib/compass/compiler.rb:101:in `block in run'
C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/compass-0.12.4/lib/compass/compiler.rb:126:in `timed'
C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/compass-0.12.4/lib/compass/compiler.rb:100:in `run'
C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/compass-0.12.4/lib/compass/commands/watch_project.rb:147:in `recompile'
C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/compass-0.12.4/lib/compass/commands/watch_project.rb:68:in `perform'
C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/compass-0.12.4/lib/compass/commands/base.rb:18:in `execute'
C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/compass-0.12.4/lib/compass/commands/project_base.rb:19:in `execute'
C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/compass-0.12.4/lib/compass/exec/sub_command_ui.rb:43:in `perform!'
C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/compass-0.12.4/lib/compass/exec/sub_command_ui.rb:15:in `run!'
C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/compass-0.12.4/bin/compass:30:in `block in <top (required)>'
C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/compass-0.12.4/bin/compass:44:in `call'
C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/compass-0.12.4/bin/compass:44:in `<top (required)>'
C:/Ruby200-x64/bin/compass:23:in `load'
C:/Ruby200-x64/bin/compass:23:in `<main>'
>>> Compass is polling for changes. Press Ctrl-C to Stop.
我不知道该怎么做。
从做一些阅读(https://github.com/chriseppstein/compass/issues/1406)我相信它与'Ruby'的权限或PATH有关。 'Ruby Gems',但我不知道如何解决这个问题。
答案 0 :(得分:36)
为了让它在32或64位窗口中工作,我完成了Min Ren所建议的但我还必须在卸载步骤之后手动清理所有sass和指南针gemspec文件的gem存储库(C:\Users\myusername\.gem\specs\rubygems.org%443\quick\Marshal.4.8
)。我还在指南针之前安装了sass。
gem uninstall compass
gem uninstall sass
手动清理.gem
gem install sass --version "3.2.10"
gem install compass --version "0.12.2"
答案 1 :(得分:9)
我有一段时间遇到同样的问题并最终手动修复了。经过一番挖掘后,问题似乎是在util.rb中,临时文件在文件关闭之前被重命名为 。在Windows中,这显然是不允许的(虽然不确定为什么我在过去工作后突然开始解决问题)。
我的修复是编辑util.rb(PATH_TO_RUBY \ lib \ ruby \ gems \ 1.9.1 \ gems \ sass-3.2.18 \ lib \ sass \ util.rb)。我将关闭临时文件的行复制到第897行的权限更改+重命名之前。这是我现在拥有的更新函数:
def atomic_create_and_write_file(filename, perms = 0666)
require 'tempfile'
tmpfile = Tempfile.new(File.basename(filename), File.dirname(filename))
tmpfile.binmode if tmpfile.respond_to?(:binmode)
result = yield tmpfile
tmpfile.flush # ensure all writes are flushed to the OS
begin
tmpfile.fsync # ensure all buffered data in the OS is sync'd to disk.
rescue NotImplementedError
# Not all OSes support fsync
end
tmpfile.close if tmpfile
# Make file readable and writeable to all but respect umask (usually 022).
File.chmod(perms & ~File.umask, tmpfile.path)
File.rename tmpfile.path, filename
result
ensure
# close and remove the tempfile if it still exists,
# presumably due to an error during write
tmpfile.close if tmpfile
tmpfile.unlink if tmpfile
end
这里有一个重要的警告,我不是一个Ruby人,我相信可能有更好的方法。但是我只是快速尝试了这个mod,并且它有效,所以我没有多加入它。
答案 2 :(得分:4)
它看起来像最新版Sass中的一个错误。
卸载Sass和Compass并安装旧版本可以解决问题。
可能有更新的版本可以使用,但这是我测试过的并且知道有效。
gem uninstall compass
gem uninstall sass
gem install compass -v "0.12.2"
gem install sass -v "3.2.13"
答案 3 :(得分:4)
看起来问题已在SASS 3.2.19中解决
所以你需要的只是gem update compass
答案 4 :(得分:3)
我遇到了类似的错误,但分辨率完全不同,所以我认为值得分享以防其他人遇到我的情景。
我实际上得到了权限被拒绝,因为我的源代码控制使我的.css文件成为只读。解决方案很简单,只需检查css文件,一切都恢复正常。
答案 5 :(得分:1)
我遇到了同样的问题。我做了建议 - 卸载&amp;使用--pre安装,但这并没有解决我的问题。之后我遇到了另一个问题。那么,我当时所做的是:我已经再次卸载了指南针和sass gem。我删除了ruby / gems / ruby1.9.1 / gems文件夹中的所有与指南针相关的宝石(这可能不是必需的,不确定),而不是我安装的:gem install compass --version&#34; 0.12.2&#34;和gem安装sass --version&#34; 3.2.10&#34;。我不认为这里的版本太重要了,只要它不是这两个版本的最新版本。现在重要的一点是:gem uninstall sass。它会询问您要删除哪个版本或者是否所有版本。删除较新的。这里的技巧是指南针自动安装最新版本的sass。因此,如果你安装一个较旧的,它并不重要,因为已经有更新的罗盘将被使用。试试吧。
答案 6 :(得分:0)
卸载SASS:gem uninstall sass
卸载COMPASS:gem uninstall compass
安装--pre COMPASS版本:gem install compass --pre
安装--pre SASS版本:gem install sass --pre
答案 7 :(得分:0)
我遇到了类似的问题,我可以通过卸下指南针和sass来解决它:
gem uninstall compass
gem uninstall sass
然后,您需要做的就是安装罗盘:
gem install compass
sass是罗盘安装的一部分,因此不需要单独安装。看来我遇到的问题是作为罗盘安装的一部分安装的版本与我手动安装的版本之间存在冲突。
答案 8 :(得分:0)
当我以管理员身份运行cygwin命令提示符窗口时,问题得到了解决。