Rails: неверная последовательность байтов в US-ASCII (ошибка аргумента) при запуске rake db: seed

87

Когда я запускаю rake db:seedсвое Railsприложение, я получаю эту ошибку:

недопустимая последовательность байтов в US-ASCII (ошибка аргумента)

Я просто добавил science_majorsи перешел в свой исходный файл, и теперь, когда я запускаю, rake db:seedон дает мне эту ошибку:

неверная ошибка последовательности байтов

Почему это так и как это исправить?

часть seed.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

Я не учел все другие колледжи. На данный момент у меня 200 школ, но Питт - единственная, у которой есть исчерпывающие данные. У остальных просто базовые данные, как у Гарварда. Я также опустил некоторые данные для Питта для краткости, но дайте мне знать, если вы хотите, чтобы я включил остальные.

Изменить: Я пытался вынимая *«S в science_majorsвниз и затем запустить rake db:seed, но это ничего не изменило.

Адам Зернер
источник

Ответы:

182

Вы получаете ошибку кодирования, потому что ваша файловая система не настроена для кодирования добавленной вами даты (поскольку предположительно она включает в себя новые символы - возможно, в URL-адресе карты, закодированной в HTML-коде - которых не было в вашем предыдущем исходном коде данных) .

Следующая команда должна устранить эту ошибку, установив на вашем компьютере локаль UTF-8:

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

Преимущество установки языкового стандарта системы состоит в том, что все драгоценные камни (в будущем) будут объединены с использованием кодировки UTF-8.

РЕДАКТИРОВАТЬ:

В качестве альтернативы, если вы не хотите изменять системную кодировку, вы можете установить кодировку для всего проекта, указав стандарт кодирования в вашем 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
Рад, что помог. Если вы воспользуетесь этим подходом, убедитесь, что для всех сред, в которых вы развернули свой проект, установлены языковые стандарты UTF-8. В противном случае вам нужно будет добавить #encoding utf-8в начало файла, чтобы убедиться, что он правильно закодирован, как проницательно отмечает другой плакат.
zeantsoi
На самом деле я просто попытался удалить #encoding utf-8 и сделать то, что вы сказали, но это не сработало. ~/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] `, чтобы увидеть, где установлен связанный гем. ~ / Collegeanswers >> rake db: грабли посевного материала прерваны! `знаете почему?
Adam Zerner
В чем твоя rakeошибка? Ваши существующие драгоценные камни, вероятно, еще не настроены для работы с кодировкой вашей файловой системы. bbundle exec gem uninstall i18nТогда попробуй bundle install.
zeantsoi
моя ошибка граблей была invalid byte sequence in US-ASCII (ArgumentError) . Я просто попробовал то, что вы сказали, и получил ту же ошибку.
Adam Zerner
Вы перезапустили свой веб-сервер? Обновил мой ответ, чтобы предоставить больше возможностей для достижения того, чего вы пытаетесь достичь.
zeantsoi
64

Добавить

#encoding: utf-8

вверху файла

BvuRVKyUVlViVIc7
источник
Почему мне нужно это делать сейчас, а раньше не было?
Adam Zerner
Я просто попробовал, и это сработало, кстати, спасибо! Но мне все равно хотелось бы знать, почему раньше все работало, а теперь мне нужно добавить это, чтобы это работало.
Adam Zerner
1
Может быть, вы добавили в свой файл какие-то особые знаки utf-8 .. :)
BvuRVKyUVlViVIc7
Я только что прочитал обновления ответа другого парня, и он на самом деле более исчерпывающий, поэтому я отмечу это как принятый ответ, но я все же очень ценю вашу помощь!
Адам Зернер
39

Вы также можете попробовать, export RUBYOPT="-KU -E utf-8:utf-8" как указано в этой ветке GH

Lanwen
источник
Благодарность! Это единственное, что помоглоshotgun-0.9.1/bin/shotgun:94:in `[]': invalid byte sequence in US-ASCII (ArgumentError)
Слава V
18

Если у вас возникла эта проблема в докер-контейнере ruby, вы можете установить LANG=C.UTF-8:

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

или посмотрите этот выпуск .

Laktak
источник
или, как видно по ссылке в этом ответе, при создании собственного образа Docker добавьте «ENV LANG = C.UTF-8» в свой Dockerfile
Алекс,
7

Как и предлагали другие, я добавил #encoding: utf-8в начало своего (в данном случае seed.rb) файла, но все равно не смог заставить работать задачу rake.

Интересно, что друг порекомендовал мне удалить дополнительные комментарии, сгенерированные rails, из верхней части исходного файла, чтобы они #encoding: utf-8остались.

Что бы вы знали - это сработало.

чеширеоктопус
источник
1

В вашем исходном файле есть недопустимый символ, в моем случае изменение одинарных кавычек с `на 'выработано.

Альдо Солис Зентено
источник