Carriles: secuencia de bytes no válida en US-ASCII (error de argumento) cuando ejecuto rake db: seed

87

Cuando ejecuto rake db:seedmi Railsaplicación, aparece este error:

secuencia de bytes no válida en US-ASCII (error de argumento)

Acabo de agregar science_majorsy bajar a mi archivo semilla, y ahora, cuando lo ejecuto rake db:seed, me da este error:

error de secuencia de bytes no válido

¿Por qué es esto y cómo puedo solucionarlo?

parte 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

Dejé fuera todas las otras universidades. Tengo 200 escuelas hasta ahora, pero Pitt es el único con datos completos hasta ahora. El resto solo tiene datos básicos, como Harvard. También dejé algunos de los datos para Pitt en aras de la brevedad, pero avíseme si desea que incluya el resto.

Editar: Intenté sacar los *'s in science_majorshacia abajo y luego ejecutar rake db:seed, pero eso no cambió nada.

Adam Zerner
fuente

Respuestas:

182

Está recibiendo un error de codificación porque su sistema de archivos no está configurado para codificar la fecha que ha agregado (ya que presumiblemente incluye nuevos caracteres, posiblemente en la URL del mapa codificada de su entidad HTML, que no existían en su semilla de datos anterior) .

Lo siguiente debería resolver este error configurando la configuración regional UTF-8 en su máquina:

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

El beneficio de establecer una configuración regional del sistema es que todas las gemas (en el futuro) se agruparán utilizando codificación UTF-8.

EDITAR:

Alternativamente, si no desea cambiar la codificación de su sistema, puede configurar su codificación en todo el proyecto especificando un estándar de codificación en su 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
fuente
1
Me alegro de que haya ayudado. Si adopta este enfoque, asegúrese de que todos los entornos en los que ha implementado su proyecto tengan sus configuraciones regionales configuradas en UTF-8. De lo contrario, deberá agregarlo #encoding utf-8a la parte superior de su archivo para asegurarse de que esté codificado correctamente, como señala astutamente el otro cartel.
Zeantsoi
De hecho, solo intenté eliminar #encoding utf-8 y hacer lo que dijiste, pero no funcionó. ~/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] `para ver dónde está instalada una gema empaquetada. ~ / collegeanswers >> rake db: ¡rastrillo de semillas abortado! `¿Sabes por qué?
Adam Zerner
Cual es tu rakeerror? Es probable que sus gemas existentes aún no estén configuradas para funcionar con la codificación de su sistema de archivos. Prueba bbundle exec gem uninstall i18nentonces bundle install.
zeantsoi
mi error de rake fue invalid byte sequence in US-ASCII (ArgumentError) . Intenté lo que dijiste y obtuve el mismo error.
Adam Zerner
¿Reinició su servidor web? Actualicé mi respuesta para brindar más opciones para lograr lo que está tratando de lograr.
zeantsoi
64

Añadir

#encoding: utf-8

en la parte superior del archivo

BvuRVKyUVlViVIc7
fuente
¿Por qué necesito hacer eso ahora, pero antes no tenía que hacerlo?
Adam Zerner
Lo probé y funcionó por cierto, ¡así que gracias! Pero todavía me gustaría saber por qué todo funcionaba antes, y ahora necesito agregar eso para que funcione.
Adam Zerner
1
Tal vez agregó algunos signos utf-8 especiales en su archivo .. :)
BvuRVKyUVlViVIc7
Acabo de leer las actualizaciones de la respuesta del otro tipo y en realidad es más completo, así que lo marcaré como la respuesta aceptada, ¡pero aún así agradezco tu ayuda!
Adam Zerner
39

También puede probar export RUBYOPT="-KU -E utf-8:utf-8" como se menciona en este hilo de GH

lanwen
fuente
¡Gracias! Esa es la única cosa que ayudó conshotgun-0.9.1/bin/shotgun:94:in `[]': invalid byte sequence in US-ASCII (ArgumentError)
Slava V
18

Si tiene este problema en un contenedor de Docker Ruby, puede configurar LANG=C.UTF-8:

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

o mira este número .

laktak
fuente
o como se ve en el enlace de esta respuesta, si crea su propia imagen de Docker, agregue 'ENV LANG = C.UTF-8' a su Dockerfile
Alex
7

Como sugirieron otros, agregué #encoding: utf-8a la parte superior de mi archivo (en este caso, seed.rb), pero aún así no pude hacer que la tarea de rake funcionara.

Curiosamente, un amigo me recomendó que eliminara los comentarios adicionales generados por rieles de la parte superior del archivo semilla para que solo #encoding: utf-8quedaran.

¿Qué sabrías? Funcionó.

pulpo cheshire
fuente
1

Hay un carácter no válido en su archivo semilla, en mi caso, el cambio de comillas simples de 'a' funcionó.

Aldo Solis Zenteno
fuente