Rails: Nieprawidłowa sekwencja bajtów w US-ASCII (błąd argumentu), gdy uruchamiam rake db: seed


87

Kiedy uruchomić rake db:seedw moim Railsapp, otrzymuję ten błąd:

nieprawidłowa sekwencja bajtów w US-ASCII (błąd argumentu)

Właśnie dodałem science_majorsi w dół do mojego pliku źródłowego, a teraz po uruchomieniu wyświetla rake db:seedmi ten błąd:

błąd nieprawidłowej kolejności bajtów

Dlaczego tak jest i jak mogę to naprawić?

część 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

Pominąłem wszystkie inne uczelnie. Jak dotąd mam 200 szkół, ale Pitt jest jak dotąd jedyną szkołą, która ma wyczerpujące dane. Reszta ma tylko podstawowe dane, jak Harvard. Ze względu na zwięzłość również pominąłem niektóre dane dla Pitta, ale daj mi znać, jeśli chcesz, żebym dołączył resztę.

Edycja: próbowałem zdjąć *w science_majorsdół, a następnie biegać rake db:seed, ale to niczego nie zmieniło.

Odpowiedzi:


182

Otrzymujesz błąd kodowania, ponieważ Twój system plików nie jest skonfigurowany do kodowania dodanej daty (ponieważ prawdopodobnie zawiera nowe znaki - prawdopodobnie w adresie URL mapy zakodowanej w encji HTML - które nie istniały w poprzednim źródle danych) .

Poniższe rozwiązania powinny rozwiązać ten błąd poprzez ustawienie ustawień regionalnych UTF-8 na komputerze:

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

Zaletą ustawienia ustawień regionalnych systemu jest to, że wszystkie klejnoty (w przyszłości) będą pakowane przy użyciu kodowania UTF-8.

EDYTOWAĆ:

Alternatywnie, jeśli nie chcesz zmieniać kodowania systemu, możesz ustawić kodowanie dla całego projektu, określając standard kodowania w pliku 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
Cieszę się, że pomogło. Jeśli zastosujesz to podejście, upewnij się, że wszystkie środowiska, w których wdrożono projekt, mają ustawienia regionalne ustawione na UTF-8. W przeciwnym razie musisz dodać #encoding utf-8plik na początku pliku, aby upewnić się, że jest prawidłowo zakodowany, jak sprytnie zauważa drugi plakat.
zeantsoi

właściwie próbowałem usunąć #encoding utf-8 i zrobić to, co powiedziałeś, ale to nie zadziałało. ~/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 [nazwa klejnotu] `, aby zobaczyć, gdzie jest zainstalowany pakiet gem. ~ / collegeanswers >> rake db: seed rake aborted! `Czy wiesz dlaczego?
Adam Zerner,

Jaki jest twój rakebłąd? Twoje istniejące perełki prawdopodobnie nie są jeszcze skonfigurowane do pracy z kodowaniem twojego systemu plików. Spróbuj bbundle exec gem uninstall i18nwięc bundle install.
zeantsoi

mój błąd rake był invalid byte sequence in US-ASCII (ArgumentError) . Właśnie wypróbowałem to, co powiedziałeś i otrzymałem ten sam błąd.
Adam Zerner,

Czy zrestartowałeś serwer internetowy? Zaktualizowałem moją odpowiedź, aby zapewnić więcej możliwości osiągnięcia tego, co próbujesz osiągnąć.
zeantsoi

64

Dodaj

#encoding: utf-8

u góry pliku


Dlaczego muszę to robić teraz, ale wcześniej nie musiałem?
Adam Zerner,

Właśnie spróbowałem i przy okazji zadziałało, więc dzięki! Ale nadal chciałbym wiedzieć, dlaczego wszystko działało wcześniej, a teraz muszę to dodać, aby to zadziałało.
Adam Zerner

1
Może dodałeś jakieś specjalne znaki utf-8 w swoim pliku .. :)
BvuRVKyUVlViVIc7

Właśnie przeczytałem aktualizacje odpowiedzi drugiego gościa i jest w rzeczywistości bardziej wyczerpująca, więc zaznaczę to jako zaakceptowaną odpowiedź, ale nadal naprawdę doceniam twoją pomoc!
Adam Zerner

39

Możesz także spróbować, export RUBYOPT="-KU -E utf-8:utf-8" jak wspomniano w tym wątku GH


Dzięki! To jedyna rzecz, która pomogłashotgun-0.9.1/bin/shotgun:94:in `[]': invalid byte sequence in US-ASCII (ArgumentError)
Slava V

18

Jeśli masz ten problem w kontenerze Ruby Docker, możesz ustawić LANG=C.UTF-8:

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

lub obejrzyj ten numer .


lub jak widać w linku w tej odpowiedzi, jeśli tworzysz własny obraz Dockera, dodaj „ENV LANG = C.UTF-8” do pliku Dockerfile
Alex

7

Jak sugerowali inni, dodałem #encoding: utf-8na początku mojego pliku (w tym przypadku seed.rb), ale nadal nie mogłem uruchomić zadania rake.

Co ciekawe, znajomy polecił mi usunąć dodatkowe komentarze generowane przez railsy z góry pliku seed, aby tylko #encoding: utf-8pozostały.

Co byś wiedział - zadziałało.


1

W twoim pliku źródłowym znajduje się nieprawidłowy znak, w moim przypadku udało się zmienić pojedyncze cudzysłowy z `na '.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.