Ungültige Bytesequenz in US-ASCII (Argument Error), wenn ich rake db: seed in Rails ausführe

87

Wenn ich rake db:seedin meiner RailsApp starte, wird folgende Fehlermeldung angezeigt:

ungültige Bytesequenz in US-ASCII (Argument Error)

Ich habe gerade science_majorsmeine Seed-Datei hinzugefügt und heruntergefahren, und jetzt, wenn ich sie ausführe rake db:seed, wird folgende Fehlermeldung angezeigt:

ungültiger Bytefolgefehler

Warum ist das so und wie kann ich es beheben?

Teil von 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

Ich habe alle anderen Colleges ausgelassen. Ich habe bisher 200 Schulen, aber Pitt ist die einzige mit umfassenden Daten. Der Rest hat nur grundlegende Daten, wie Harvard. Der Kürze halber habe ich auch einige Daten für Pitt weggelassen, aber lassen Sie mich wissen, ob ich den Rest einbeziehen soll.

Bearbeiten: Ich habe versucht, die *'s in science_majorson down herauszunehmen und dann zu rennen rake db:seed, aber das hat nichts geändert.

Adam Zerner
quelle

Antworten:

178

Sie erhalten einen Codierungsfehler, weil Ihr Dateisystem nicht für die Codierung des von Ihnen hinzugefügten Datums konfiguriert ist (da es vermutlich neue Zeichen enthält - möglicherweise in Ihrer HTML-Entitäts-codierten Karten-URL -, die in Ihrem vorherigen Datensamen nicht vorhanden waren). .

Der folgende Fehler sollte diesen Fehler beheben, indem Sie das UTF-8-Gebietsschema auf Ihrem Computer festlegen:

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

Der Vorteil des Festlegens eines Systemgebietsschemas besteht darin, dass alle Edelsteine ​​(in Zukunft) mithilfe der UTF-8-Codierung gebündelt werden.

BEARBEITEN:

Wenn Sie Ihre Systemcodierung nicht ändern möchten, können Sie Ihre Codierung alternativ projektweit festlegen, indem Sie in Ihrer Gemfile einen Codierungsstandard angeben:

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
quelle
1
Ich bin froh, dass es geholfen hat. Wenn Sie diesen Ansatz wählen, stellen Sie sicher, dass in allen Umgebungen, in denen Sie Ihr Projekt bereitgestellt haben, die Gebietsschemas auf UTF-8 festgelegt sind. Andernfalls müssen Sie #encoding utf-8oben in Ihre Datei einfügen, um sicherzustellen, dass sie ordnungsgemäß codiert ist, wie das andere Poster scharfsinnig feststellt.
Zeantsoi
Ich habe eigentlich nur versucht, #encoding utf-8 zu entfernen und das zu tun, was du gesagt hast, aber es hat nicht funktioniert. ~/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] `, um zu sehen, wo ein gebündelter Gem installiert ist. ~ / collegeanswers >> rake db: Samenrechen abgebrochen! `Weißt du warum?
Adam Zerner
Was ist dein rakeFehler? Ihre vorhandenen Edelsteine ​​sind wahrscheinlich noch nicht für die Verwendung mit Ihrer Dateisystemcodierung konfiguriert. Versuchen Sie es bbundle exec gem uninstall i18ndann bundle install.
Zeantsoi
Mein Rechenfehler war invalid byte sequence in US-ASCII (ArgumentError) . Ich habe gerade versucht, was Sie gesagt haben, und habe den gleichen Fehler erhalten.
Adam Zerner
Haben Sie Ihren Webserver neu gestartet? Meine Antwort wurde aktualisiert, um mehr Optionen für das zu erreichen, was Sie erreichen möchten.
Zeantsoi
64

Hinzufügen

#encoding: utf-8

am Anfang der Datei

BvuRVKyUVlViVIc7
quelle
Warum muss ich das jetzt tun, aber bevor ich es nicht musste?
Adam Zerner
Ich habe es gerade versucht und es hat übrigens funktioniert, also danke! Aber ich würde immer noch gerne wissen, warum vorher alles funktioniert hat, und jetzt muss ich das hinzufügen, damit es funktioniert.
Adam Zerner
1
Vielleicht haben Sie einige spezielle utf-8-Zeichen in Ihre Datei
eingefügt
Ich habe gerade die Aktualisierungen der Antwort des anderen gelesen und sie ist tatsächlich umfassender, daher werde ich sie als akzeptierte Antwort markieren, aber ich schätze Ihre Hilfe trotzdem sehr!
Adam Zerner
39

Sie können es auch export RUBYOPT="-KU -E utf-8:utf-8" wie in diesem GH-Thread erwähnt versuchen

lanwen
quelle
Vielen Dank! Das ist das einzige, was geholfen hatshotgun-0.9.1/bin/shotgun:94:in `[]': invalid byte sequence in US-ASCII (ArgumentError)
Slava V
17

Wenn Sie dieses Problem in einem Ruby Docker-Container haben, können Sie entweder Folgendes festlegen LANG=C.UTF-8:

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

oder sehen Sie sich diese Ausgabe an .

Laktak
quelle
7

Wie andere vorgeschlagen haben, habe ich #encoding: utf-8oben in meiner Datei (in diesem Fall seed.rb) hinzugefügt, konnte aber die Rake-Aufgabe immer noch nicht zum Laufen bringen.

Interessanterweise empfahl mir ein Freund, die zusätzlichen, von Rails generierten Kommentare oben in der Seed-Datei zu entfernen, damit nur sie #encoding: utf-8übrig bleiben.

Was würden Sie wissen - es hat funktioniert.

Cheshireoctopus
quelle
1

Ihre Seed-Datei enthält ein ungültiges Zeichen. In meinem Fall wurde das Ändern von einfachen Anführungszeichen von "in" geändert.

Aldo Solis Zenteno
quelle