web-dev-qa-db-ja.com

"Errno :: EACCESS ... permission denied"実行中のコンパス時計

プログラム(Git、Node Js、Rubyなど)がD:ドライブにあるときに、プロジェクトファイルをC:ドライブの新しいPCに移行しました。

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 )私はそれがの権限またはPATHと関係があると思いますRuby '&' Ruby Gems 'ですが、これを解決する方法がわかりません。

13
Sheixt

32ビットまたは64ビットのウィンドウで動作させるために、Min Renの提案を実行しましたが、gemリポジトリ(C:\Users\myusername\.gem\specs\rubygems.org%443\quick\Marshal.4.8)アンインストール手順後のすべてのsassおよびcompass gemspecファイル。コンパスの前にsassもインストールしました。

gem uninstall compass
gem uninstall sass

.gemを手動でクリーンアップ

gem install sass --version "3.2.10"
gem install compass --version "0.12.2" 
36
Bill Duncan

私はしばらく同じ問題を抱えていましたが、最終的に手動で修正しました。掘り下げた後、問題は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

ここでの大きな注意点の1つは、私がRubyの人ではないことであり、おそらくもっと良い方法があると確信しています。しかし、私はこのmodをすばやく試してみましたが、うまくいきました。それにもっと入れます。

9
Mark Hazlewood

Sassの最新バージョンのバグのようです。

SassとCompassをアンインストールし、古いバージョンをインストールすると問題が解決します。

動作する新しいバージョンがあるかもしれませんが、ここで私がテストし、動作することを確認しました。

gem uninstall compass
gem uninstall sass

gem install compass -v "0.12.2"
gem install sass -v "3.2.13"
4
Min Ren

SASS 3.2.19で問題は解決したようです

必要なのはgem update compass

4
grigson

同様のエラーが発生しましたが、解決方法がまったく異なるため、他の誰かが私のシナリオに遭遇した場合に備えて、共有する価値があると思いました。

ソース管理で.cssファイルが読み取り専用になっているため、実際には権限が拒否されていました。解決策は非常に単純で、cssファイルをチェックアウトするだけで、すべてが正常に戻りました。

3
Wake

私も同じ問題を抱えていました。私は提案された---preを使用したアンインストールとインストールを行いましたが、それでも私の問題は解決しませんでした。その後、別の問題に遭遇しました。さて、私がしたことは次のとおりです。コンパスとサスの宝石を再びアンインストールしました。 Ruby/gems/Ruby1.9.1/gemsフォルダー内のコンパスに関連するすべてのgemを削除し(おそらく必要ではないので、確かではありません)、インストールしたもの:gem install compass --version "0.12.2"およびgem install sass-バージョン「3.2.10」。これらの2つの最新バージョンでない限り、ここでのバージョンはそれほど重要ではないと思います。ここで重要なのは、gem uninstall sassです。消去するバージョンまたはすべてのバージョンを確認します。新しいものを削除してください。ここでの秘訣は、compassが最新バージョンのsassを自動的にインストールすることです。古いコンパスをインストールしても、コンパス付きの新しいコンパスがすでに使用されているため、問題ありません。それを試してみてください。

1
cizza

管理者としてcygwinコマンドのプロンプトウィンドウを実行すると、問題が解決しました。

0
Amit

SASSをアンインストールします:gem uninstall sass

COMPASSをアンインストールします:gem uninstall compass

--pre COMPASSバージョンをインストールします:gem install compass --pre

--pre SASSバージョンをインストールします:gem install sass --pre

0

私は同様の問題を抱えていましたが、コンパスとサスの両方をアンインストールすることで解決できました:

gem uninstall compass 
gem uninstall sass

次に、コンパスをインストールするだけです。

gem install compass

sassはコンパスのインストールの一部として必要なので、個別にインストールする必要はありません。私が直面していた問題は、コンパスのインストールの一部としてインストールされたバージョンと手動でインストールしたバージョンの間に矛盾があったことでした。

0
pdp2