Rails: sequenza di byte non valida in US-ASCII (errore di argomento) quando eseguo rake db: seed


87

Quando corro rake db:seednella mia Railsapp, ricevo questo errore:

sequenza di byte non valida in US-ASCII (errore di argomento)

Ho appena aggiunto science_majorse ridotto al mio file seme, e ora quando rake db:seedlo eseguo mi dà questo errore:

errore di sequenza di byte non valido

Perché è questo e come posso risolverlo?

parte di 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

Ho lasciato fuori tutti gli altri college. Finora ho 200 scuole, ma Pitt è l'unica con dati completi finora. Il resto ha solo dati di base, come Harvard. Ho anche tralasciato alcuni dati per Pitt per brevità, ma fammi sapere se desideri che includa il resto.

Modifica: ho provato a togliere la *s in science_majorsgiù e poi a correre rake db:seed, ma questo non ha cambiato nulla.

Risposte:


182

Stai ricevendo un errore di codifica perché il tuo filesystem non è configurato per codificare la data che hai aggiunto (poiché presumibilmente include nuovi caratteri - possibilmente nell'URL della mappa codificata dell'entità HTML - che non esistevano nel seme di dati precedente) .

Quanto segue dovrebbe risolvere questo errore impostando la locale UTF-8 sulla tua macchina:

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

Il vantaggio di impostare una locale di sistema è che tutte le gemme (d'ora in poi) verranno raggruppate utilizzando la codifica UTF-8.

MODIFICARE:

In alternativa, se non desideri modificare la codifica del tuo sistema, puoi impostare la codifica a livello di progetto specificando uno standard di codifica nel tuo 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

1
Sono contento che abbia aiutato. Se adotti questo approccio, assicurati che tutti gli ambienti in cui hai distribuito il tuo progetto abbiano le impostazioni locali impostate su UTF-8. Altrimenti, dovrai aggiungerlo #encoding utf-8all'inizio del file per assicurarti che sia codificato correttamente, come nota astutamente l'altro poster.
zeantsoi

In realtà ho appena provato a rimuovere #encoding utf-8 e a fare quello che hai detto ma non ha funzionato. ~/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] `per vedere dove è installato un gem in bundle. ~ / collegeanswers >> rake db: seed rake aborted! `sai perché?
Adam Zerner

Qual è il tuo rakeerrore? Le tue gemme esistenti probabilmente non sono ancora configurate per funzionare con la codifica del tuo filesystem. bbundle exec gem uninstall i18nAllora prova bundle install.
zeantsoi

il mio errore di rake era invalid byte sequence in US-ASCII (ArgumentError) . Ho appena provato quello che hai detto e ho ricevuto lo stesso errore.
Adam Zerner

Hai riavviato il tuo server web? Ho aggiornato la mia risposta per fornire più opzioni per realizzare ciò che stai cercando di ottenere.
zeantsoi

64

Inserisci

#encoding: utf-8

all'inizio del file


Perché devo farlo adesso, ma prima non dovevo?
Adam Zerner

L'ho appena provato e ha funzionato, quindi grazie! Ma mi piacerebbe ancora sapere perché tutto funzionava prima, e ora devo aggiungerlo affinché funzioni.
Adam Zerner

1
Forse hai aggiunto alcuni segni speciali utf-8 nel tuo file .. :)
BvuRVKyUVlViVIc7

Ho appena letto gli aggiornamenti alla risposta dell'altro ragazzo ed è in realtà più completo, quindi lo contrassegnerò come risposta accettata, ma apprezzo comunque il tuo aiuto!
Adam Zerner

39

Puoi anche provare export RUBYOPT="-KU -E utf-8:utf-8" come menzionato in questo thread GH


Grazie! Questa è l'unica cosa che ha aiutatoshotgun-0.9.1/bin/shotgun:94:in `[]': invalid byte sequence in US-ASCII (ArgumentError)
Slava V

18

Se stai riscontrando questo problema in un container Docker Ruby puoi impostare LANG=C.UTF-8:

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

o guarda questo numero .


o come si vede nel link in questa risposta, se crei la tua immagine Docker, aggiungi 'ENV LANG = C.UTF-8' al tuo Dockerfile
Alex

7

Come altri hanno suggerito, ho aggiunto #encoding: utf-8all'inizio del mio file (in questo caso seed.rb), ma non riuscivo ancora a far funzionare l'attività rake.

È interessante notare che un amico mi ha consigliato di rimuovere i commenti aggiuntivi generati da rails dalla parte superiore del file seme in modo che #encoding: utf-8rimanessero solo .

Cosa sapresti - ha funzionato.


1

C'è un carattere non valido nel tuo file seme, nel mio caso la modifica delle virgolette singole da `a 'è stata risolta.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.