Je viens de migrer mes fichiers de projet sur un nouveau PC sur le lecteur D:
alors que mes programmes (Git, Node Js, Ruby, etc.) sont sur le lecteur C:
.
J'ai essayé d'exécuter compass watch
après avoir modifié un fichier SASS, mais j'ai rencontré l'erreur suivante:
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
Je suis novice avec Ruby en ligne de commande (je ne l'utilise que pour le développement Web). Que dois-je faire pour autoriser les autorisations?
S'il vous plaît laissez-moi savoir si je peux fournir plus d'informations.
EDIT: Voici ce qui a été renvoyé après l'exécution de 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.
Je ne sais pas quoi en tirer cependant.
De lire un peu ( https://github.com/chriseppstein/compass/issues/1406 ) Je crois que c'est quelque chose à voir avec les permissions ou PATH pour 'Ruby' & 'Ruby Gems' mais Je ne sais pas quoi faire pour résoudre ce problème.
Pour que cela fonctionne dans les fenêtres 32 ou 64 bits, j'ai fait ce que Min Ren avait suggéré, mais je devais aussi nettoyer manuellement le référentiel de pierres précieuses (C:\Users\myusername\.gem\specs\rubygems.org%443\quick\Marshal.4.8
) de tous les fichiers gasspec sass et compass à la suite de la désinstallation. J'ai aussi installé sass avant la boussole.
gem uninstall compass
gem uninstall sass
nettoyer manuellement .gem
gem install sass --version "3.2.10"
gem install compass --version "0.12.2"
J'ai eu ce même problème pendant un certain temps et finalement résolu manuellement. Après quelques recherches, le problème semble être que dans util.rb, le fichier temporaire est renommé avant que le fichier ne soit fermé . Sous Windows, cela n’est apparemment pas autorisé (bien que je ne sois pas sûr de la raison pour laquelle j’ai soudainement commencé à avoir le problème après avoir travaillé sur le passé).
Le correctif pour moi était de modifier util.rb (PATH_TO_Ruby\lib\Ruby\gems\1.9.1\gems\sass-3.2.18\lib\sass\util.rb). J'ai copié la ligne fermant le fichier temporaire avant la modification de l'autorisation + renommer à la ligne 897. Voici la fonction mise à jour telle que je l'ai maintenant:
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
Une grosse mise en garde ici est que je ne suis pas un Ruby et je suis sûr qu'il existe probablement une meilleure solution. Mais j'ai juste essayé ce mod rapidement, et cela a fonctionné, donc je n'y ai pas mis plus.
Cela ressemble à un bug dans la dernière version de Sass.
La désinstallation de Sass et Compass et l’installation des versions antérieures résolvent le problème.
Il se peut que de nouvelles versions fonctionnent, mais voici ce que j'ai testé et que je sais qui fonctionne.
gem uninstall compass
gem uninstall sass
gem install compass -v "0.12.2"
gem install sass -v "3.2.13"
On dirait que le problème est résolu dans SASS 3.2.19
donc tout ce dont vous avez besoin est gem update compass
J'avais une erreur similaire, mais la résolution était complètement différente. J'ai donc pensé que cela valait la peine d'être partagé au cas où quelqu'un d'autre rencontrerait mon scénario.
En réalité, ma permission était refusée car mon contrôle de code source rendait mes fichiers .css en lecture seule. La solution était assez simple, il suffit de consulter les fichiers css et tout est rentré dans l'ordre.
J'ai eu le même problème. J'ai fait suggéré - désinstaller et installer avec --pre, mais cela n'a pas résolu mon problème. J'ai rencontré un autre problème après cela. Eh bien, voici ce que j’ai fait: j’ai désinstallé à nouveau la boussole et le joyau. J'ai supprimé toutes les gemmes liées à la boussole dans le dossier Ruby/gems/Ruby1.9.1/gems (ce qui n'est probablement pas nécessaire, je ne suis pas sûr) et j'ai installé: gem install compass - version "0.12.2" et gem install sass - version "3.2.10". Je ne pense pas que les versions ici sont trop importantes tant que ce ne sont pas les versions les plus récentes de ces deux. Maintenant, l’important est de: gem désinstaller sass. Il vous demandera quelle version supprimer ou si toutes. Supprimer le plus récent. Le truc ici est que la boussole installe automatiquement une nouvelle version de sass. Donc, si vous en installez une plus ancienne, cela n’a pas d’importance, car il existe déjà une nouvelle boussole avec une boussole qui sera utilisée. Essayez-le.
Le problème a été résolu pour moi lorsque j'ai exécuté la fenêtre d'invite de la commande cygwin en tant qu'administrateur.
Désinstallez SASS: gem uninstall sass
Désinstallez COMPASS: gem uninstall compass
Installer la version --pre COMPASS: gem install compass --pre
Installer --pre version SASS: gem install sass --pre
J'avais un problème similaire et j'ai pu le résoudre en désinstallant boussole et sass:
gem uninstall compass
gem uninstall sass
Ensuite, tout ce que vous avez à faire est d’installer la boussole:
gem install compass
sass est requis lors de l'installation de la boussole, il ne devrait donc pas être nécessaire de l'installer séparément. Il semble que le problème auquel je faisais face était un conflit entre la version installée dans le cadre de l'installation de la boussole et celle que j'ai installée manuellement.