Rails: séquence d'octets non valide en US-ASCII (erreur d'argument) lorsque j'exécute rake db: seed

87

Lorsque je lance rake db:seeddans mon Railsapplication, j'obtiens cette erreur:

séquence d'octets non valide en US-ASCII (erreur d'argument)

Je viens d'ajouter science_majorset de descendre à mon fichier de départ, et maintenant, lorsque je l'exécute, rake db:seedcela me donne cette erreur:

erreur de séquence d'octets non valide

Pourquoi cela et comment puis-je y remédier?

partie de seeds.rb

@college = College.find_or_create_by_name!('University of Pittsburgh')
if @college.update_attributes(
  url: 'university-of-pittsburgh',
  public: 'Public',
  years: '4-year',
  category: 'National University',
  calendar: 'Semester',
  location: 'Pittsburgh, PA',
  setting: 'Large City (250-500k)',
  retention: '90',
  majors: 'business/marketing: 15%|social sciences: 14%|health professions: 11%|english: 10%|engineering: 9%|psychology: 8%|biology: 7%|history: 5%',
  scholarships_link: 'http://www.oafa.pitt.edu/universityschlrs.aspx',
  map: '<iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="https://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=university+of+pittsburgh&amp;aq=&amp;sll=40.444261,-79.970448&amp;sspn=0.142165,0.251656&amp;ie=UTF8&amp;hq=university+of+pittsburgh&amp;t=m&amp;ll=40.443486,-79.958245&amp;spn=0.010798,0.021038&amp;output=embed"></iframe><br /><small><a href="https://maps.google.com/maps?f=q&amp;source=embed&amp;hl=en&amp;geocode=&amp;q=university+of+pittsburgh&amp;aq=&amp;sll=40.431368,-79.9805&amp;sspn=0.142165,0.251656&amp;ie=UTF8&amp;hq=university+of+pittsburgh&amp;t=m&amp;ll=40.443486,-79.958245&amp;spn=0.010798,0.021038" style="color:#0000FF;text-align:left">View Larger Map</a></small>',
  street_view: '<iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="https://maps.google.com/maps?f=q&amp;source=embed&amp;hl=en&amp;geocode=&amp;q=University+of+Pittsburgh,+4200+Fifth+Ave,+Pittsburgh,+PA&amp;aq=0&amp;oq=uni&amp;sll=40.444261,-79.970448&amp;sspn=0.142165,0.251656&amp;ie=UTF8&amp;hq=University+of+Pittsburgh,+4200+Fifth+Ave,+Pittsburgh,+PA&amp;ll=40.443486,-79.958245&amp;spn=0.010798,0.021038&amp;t=m&amp;layer=c&amp;cbll=40.441775,-79.956671&amp;panoid=BgWQKMiSI1fpwP7JUF16Vg&amp;cbp=12,45.25,,0,-3.34&amp;output=svembed"></iframe><br /><small><a href="https://maps.google.com/maps?f=q&amp;source=embed&amp;hl=en&amp;geocode=&amp;q=University+of+Pittsburgh,+4200+Fifth+Ave,+Pittsburgh,+PA&amp;aq=0&amp;oq=uni&amp;sll=40.431368,-79.9805&amp;sspn=0.142165,0.251656&amp;ie=UTF8&amp;hq=University+of+Pittsburgh,+4200+Fifth+Ave,+Pittsburgh,+PA&amp;ll=40.443486,-79.958245&amp;spn=0.010798,0.021038&amp;t=m&amp;layer=c&amp;cbll=40.441775,-79.956671&amp;panoid=BgWQKMiSI1fpwP7JUF16Vg&amp;cbp=12,45.25,,0,-3.34" style="color:#0000FF;text-align:left">View Larger Map</a></small>',
  housing: '<iframe src="http://www.tour.pitt.edu/tour-categories/residence-halls" scrolling="no" height="820" width="900"></iframe>',
  food: '<div style="overflow: hidden; max-width: 1000px;"><iframe scrolling="no" src="http://www.pc.pitt.edu/dining/menus.php" style="margin-left: 0; height: 2000px; margin-top: -370px; margin-bottom: -375px; width: 750px;"></iframe></div>',
  weather: '<div style="overflow: hidden; max-width: 500px;"><iframe scrolling="no" src="http://www.weather.com/weather/wxclimatology/monthly/graph/USPA1290" style="margin-left: -40px; height: 1570px; margin-top: -490px; width: 500px;"></iframe></div>',
  dorms: 'Towers (fr.)|Sutherland (fr.)|Lothrop (fr.)|Nordenberg (fr.)|Holland (fr.)|Forbes (fr.; honors)|McCormick|Brackenridge|Amos|Bruce|Panther|Pennsylvania|Ruskin|Bouquet Gardens|Oakwood Apartments|Centre-Plaza Apartments|Forbes-Craig Apartments (honors)',
  science_majors: 'Actuarial Mathematics|Applied Mathematics|Bioinformatics|Biological Sciences|Chemistry*|Computer Science|Ecology and Evolution|Environmental Geology|Environmental Studies|Geology|History and Philosophy of Science|Linguistics*|Mathematics*|Mathematics-Economics|Mathematics-Philosophy|Microbiology|Molecular Biology|Natural Sciences Area|Neuroscience*|Physics*|Physics and Astronomy|Scientific Computing|Statistics',
  social_science_majors: 'Economics*|Economics–Statistics|History*|Political Science*|Politics-Philosophy|Psychology|Sociology*|Urban Studies',
  humanities_majors: 'Africana Studies*|Africana Studies–English|Anthropology|Chinese*|Classics*|English Literature*|English Writing|Film Studies*|French*|German|History of Art & Architecture|Humanities Area|Italian*|Italian Studies|Japanese*|Liberal Studies|Music*|Philosophy*|Religious Studies*|Russian|Slavic Studies|Spanish|Studio Arts*|Theatre Arts*',
  business_majors: 'Accounting|Finance|General Management|Global Management|Marketing',
  engineering_majors: 'Bioengineering*|Chemical Engineering*|Civil Engineering*|Computer Engineering|Electrical Engineering*|Engineering Physics|Industrial Engineering*|Materials Science and Engineering*|Mechanical Engineering*',
  professional_majors: 'Administration of Justice*|Applied Developmental Psychology|Architectural Studies|Athletic Training|Clinical Dietetics and Nutrition|Communication: Rhet & Comm|Communication Science|Dental Hygiene|Emergency Medicine|Health Information Management|Health Services|Health and Physical Activity|Information Science|Legal Studies*|Media and Professional Communications|Nursing|Pharmacy|Public Service*|Rehabilitation Science|Social Work*'
)
else
  # handle validation errors
end

@college= College.find_or_create_by_name!('Harvard')
if @college.update_attributes(
  url: 'harvard',
  public: 'Private',
  years: '4-year',
  category: 'National University',
  calendar: 'Semester',
  location: 'Cambridge, MA',
  setting: 'Small City (50-250k)',
  degrees: 'Bachelors, Masters, Doctoral',
  rotc: 'Air Force, Army, Navy',
  considered: 'Academic GPA|Alumni Relation|Application Essay|Character/Personal Qualities|Extracurricular Activities|First Generation College Student|Geographical Residence|Interview|Racial/Ethnic Status|Recommendations|Rigor of secondary school record|Standardized Test Scores|Talent/Ability|Volunteer Work|Work Experience',
  student_faculty: '7 to 1')
else
  # handle validation errors
end

J'ai laissé de côté tous les autres collèges. J'ai jusqu'à présent 200 écoles, mais Pitt est la seule avec des données complètes à ce jour. Le reste n'a que des données de base, comme Harvard. J'ai également omis certaines des données de Pitt par souci de concision, mais faites-moi savoir si vous souhaitez que j'inclue le reste.

Edit: J'ai essayé de supprimer les *'s in science_majorson down puis de courir rake db:seed, mais cela n'a rien changé.

Adam Zerner
la source

Réponses:

182

Vous recevez une erreur d'encodage car votre système de fichiers n'est pas configuré pour encoder la date que vous avez ajoutée (car il comprend vraisemblablement de nouveaux caractères - peut-être dans l'URL de votre carte encodée par entité HTML - qui n'existaient pas dans votre graine de données précédente) .

Ce qui suit devrait résoudre cette erreur en définissant les paramètres régionaux UTF-8 sur votre ordinateur:

# from your command line
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
bundle

L'avantage de définir une locale système est que toutes les gemmes (à l'avenir) seront regroupées en utilisant le codage UTF-8.

ÉDITER:

Sinon, si vous ne souhaitez pas modifier l'encodage de votre système, vous pouvez définir votre encodage à l'échelle du projet en spécifiant une norme d'encodage dans votre Gemfile:

if RUBY_VERSION =~ /1.9/ # assuming you're running Ruby ~1.9
  Encoding.default_external = Encoding::UTF_8
  Encoding.default_internal = Encoding::UTF_8
end
zeantsoi
la source
1
Heureux que cela ait aidé. Si vous adoptez cette approche, assurez-vous que tous les environnements dans lesquels vous avez déployé votre projet ont leurs paramètres régionaux définis sur UTF-8. Sinon, vous devrez ajouter #encoding utf-8en haut de votre fichier pour vous assurer qu'il est correctement codé, comme l'autre poster le note astucieusement.
zeantsoi
En fait, j'ai juste essayé de supprimer #encoding utf-8 et de faire ce que vous avez dit, mais cela n'a pas fonctionné. ~/collegeanswers >> export LANG=en_US.UTF-8 ~/collegeanswers >> export LC_ALL="en_US.UTF-8" ~/collegeanswers >> bundle Using rake (10.0.4) . . Using i18n (0.6.1) Your bundle is complete! Use bundle show [gemname] `pour voir où un gem groupé est installé. ~ / collegeanswers >> rake db: seed rake avorted! `savez-vous pourquoi?
Adam Zerner
Quelle est votre rakeerreur? Vos gemmes existantes ne sont probablement pas encore configurées pour fonctionner avec l'encodage de votre système de fichiers. Essayez bbundle exec gem uninstall i18n, alors bundle install.
zeantsoi
mon erreur de râteau était invalid byte sequence in US-ASCII (ArgumentError) . J'ai juste essayé ce que tu as dit et j'ai eu la même erreur.
Adam Zerner
Avez-vous redémarré votre serveur Web? J'ai mis à jour ma réponse pour offrir plus d'options pour accomplir ce que vous essayez d'accomplir.
zeantsoi
64

Ajouter

#encoding: utf-8

en haut du fichier

BvuRVKyUVlViVIc7
la source
Pourquoi dois-je faire ça maintenant, mais avant je n'avais pas à le faire?
Adam Zerner
Je viens de l'essayer et cela a fonctionné, alors merci! Mais j'aimerais toujours savoir pourquoi tout fonctionnait avant, et maintenant je dois l'ajouter pour que cela fonctionne.
Adam Zerner
1
Peut-être avez-vous ajouté des signes utf-8 spéciaux dans votre fichier .. :)
BvuRVKyUVlViVIc7
Je viens de lire les mises à jour de la réponse de l'autre gars et elle est en fait plus complète, donc je vais marquer cela comme la réponse acceptée, mais j'apprécie toujours beaucoup votre aide!
Adam Zerner
39

Vous pouvez également essayer export RUBYOPT="-KU -E utf-8:utf-8" comme mentionné dans ce fil de discussion GH

Lanwen
la source
Merci! C'est la seule chose qui a aidé avecshotgun-0.9.1/bin/shotgun:94:in `[]': invalid byte sequence in US-ASCII (ArgumentError)
Slava V
18

Si vous rencontrez ce problème dans un conteneur de docker ruby, vous pouvez définir LANG=C.UTF-8:

docker run -it --rm -e LANG=C.UTF-8 ruby ...

ou regardez ce numéro .

laktak
la source
ou comme indiqué dans le lien dans cette réponse, si vous créez votre propre image Docker, ajoutez 'ENV LANG = C.UTF-8' à votre Dockerfile
Alex
7

Comme d'autres l'ont suggéré, j'ai ajouté #encoding: utf-8 au début de mon fichier (dans ce cas, seed.rb), mais je n'ai toujours pas pu faire fonctionner la tâche de rake.

Fait intéressant, un ami m'a recommandé de supprimer les commentaires supplémentaires générés par les rails du haut du fichier de départ pour qu'il ne #encoding: utf-8reste plus que cela .

Que savez-vous - cela a fonctionné.

cheshireoctopus
la source
1

Il y a un caractère invalide dans votre fichier de départ, dans mon cas, changer les guillemets simples de `à 'a fonctionné.

Aldo Solis Zenteno
la source