web-dev-qa-db-fra.com

les tâches rake échouent avec une séquence d'octets non valide dans US-ASCII

Après la mise à niveau vers Ruby 1.9.3, l'une de mes applications fonctionne correctement mais la seconde que je tente de convertir échoue à l'étape "assets: precompile" lorsque j'essaie de déployer avec capistrano.

    rake aborted!
    rake aborted!
    invalid byte sequence in US-ASCII
    /Users/george/.rvm/gems/Ruby-1.9.3-p392@global/gems/rake-10.0.4/lib/rake/trace_output.rb:16:in `block in trace_on'
    /Users/george/.rvm/gems/Ruby-1.9.3-p392@global/gems/rake-10.0.4/lib/rake/trace_output.rb:14:in `map'
    /Users/george/.rvm/gems/Ruby-1.9.3-p392@global/gems/rake-10.0.4/lib/rake/trace_output.rb:14:in `trace_on'
    /Users/george/.rvm/gems/Ruby-1.9.3-p392@global/gems/rake-10.0.4/lib/rake/application.rb:328:in `trace'
    /Users/george/.rvm/gems/Ruby-1.9.3-p392@global/gems/rake-10.0.4/lib/rake/application.rb:183:in `display_error_message'
    /Users/george/.rvm/gems/Ruby-1.9.3-p392@global/gems/rake-10.0.4/lib/rake/application.rb:169:in `rescue in standard_exception_handling'
    /Users/george/.rvm/gems/Ruby-1.9.3-p392@global/gems/rake-10.0.4/lib/rake/application.rb:159:in `standard_exception_handling'
    /Users/george/.rvm/gems/Ruby-1.9.3-p392@global/gems/rake-10.0.4/lib/rake/application.rb:88:in `load_rakefile'
    /Users/george/.rvm/gems/Ruby-1.9.3-p392@global/gems/rake-10.0.4/lib/rake/application.rb:72:in `block in run'
    /Users/george/.rvm/gems/Ruby-1.9.3-p392@global/gems/rake-10.0.4/lib/rake/application.rb:160:in `standard_exception_handling'
    /Users/george/.rvm/gems/Ruby-1.9.3-p392@global/gems/rake-10.0.4/lib/rake/application.rb:70:in `run'
    /Users/george/.rvm/gems/Ruby-1.9.3-p392@Rails3211/bin/Ruby_noexec_wrapper:14:in `eval'
    /Users/george/.rvm/gems/Ruby-1.9.3-p392@Rails3211/bin/Ruby_noexec_wrapper:14:in `<main>'    

J'ai lu de nombreux articles et essayé plusieurs suggestions, mais en vain. J'ai essayé d'ajouter ce qui suit au sommet de mon fichier gem:

if Ruby_VERSION =~ /1.9/
  Encoding.default_external = Encoding::UTF_8
  Encoding.default_internal = Encoding::UTF_8
end

Mais cela n'a fait aucune différence.

J'ai vérifié les variables d'environnement LANG et LC_ALL comme suit

$ echo $LC_ALL
en_NZ.UTF-8

$ echo $LANG
en_NZ.UTF-8

J'ai bien peur de ne pas comprendre le message et de ne pas savoir identifier le fichier qui pose problème.

Je ne parviens pas à exécuter une tâche de rake - cela donne la même erreur.

Notez que je peux exécuter l'application parfaitement en mode développement.

22
giorgio

Ajouter 

#encoding: utf-8 

à la première ligne de votre Rakefile (ou quel que soit le fichier contenant les caractères étranges)

30
fotanus

Localisez le (s) fichier (s) concerné (s) à l'aide de en supprimant un à la fois

c'est-à-dire les fichiers sous lib/tasks/delete_me.rake

Puis re-ratissez ou redémarrez ce qui vous donnait le problème. Une fois que le problème est résolu Faites un git diff pour voir quel fichier était le coupable et avec votre éditeur favori, modifiez le codage du fichier.

c'est à dire., 

vim lib/tasks/delete_me.rake : définir le codage de fichier = utf-8 : wq

Puis re-rake et vous devriez être de retour en service.

5
f1v

Première exécution

$ Sudo gem install magic_encoding

Ensuite, allez dans le dossier et lancez

$ magic_encoding

Prêt!

2
Daniel

Assurez-vous de ne pas taper votre fichier en romaji (japonais). Ou le paramètre de caractères anglais pour une autre langue non US-ASCII.

J'ai essayé de lancer une base de données rake: seed et j'obtenais une erreur similaire. Il s'avère que j'avais tapé mon fichier de départ en caractères romains japonais. J'ai oublié de modifier ma saisie au clavier en États-Unis avant de travailler sur mon projet.

1
user2031423

J'ai eu le même problème et "l'erreur" était par mon prénom: il contient un caractère non US-ASCII (ö). Ce problème a été imprimé dans le fichier setup.rb Je l'ai changé en "oe" et cela a bien fonctionné.

Je vais envoyer un courriel à Bitnami pour le laisser changer

1
MrNuss

J'obtenais une erreur similaire en essayant d'exécuter n'importe quelle tâche de rake (j'utilise Rails 3.2 avec Ruby 1.9.3). J'ai essayé toutes les solutions ci-dessus sans succès. Plus tard, j'ai découvert que c'était un joyau spécifique qui causait l'erreur (dans mon cas, c'était le joyau Faker, qui avait été mis à jour il y a quelques jours). J'ai supprimé la gemme (elle n'était pas utilisée) et tout a commencé à fonctionner! Donc, mon conseil est que, si vous rencontrez ce type de problème et qu'aucune des solutions répertoriées ici ne fonctionne, vérifiez la version de chaque gem et voyez si l'une d'entre elles a été mise à jour. Essayez de les supprimer ou de définir une version compatible.

0
ana3ela

Cette erreur est survenue sur un nouveau projet que je configurais pour son travail dev env.

C'était une tâche de ratissage générant l'erreur, mais en vérifiant son encodage de fichier, il s'agissait de UTF-8.

La tâche en question consistait donc à extraire des données d’un autre fichier (qui comportait également le codage UTF-8). L'erreur a persisté.

donc, au lieu de lire le fichier tel quel (c'est-à-dire File.read("myfile.rb"))

Je l'ai changé pour:

File.read("myfile.rb", :encoding => 'utf-8'), selon les instructions de cette solution , et tout va bien à nouveau.

0
j4v1