Rails: Chuỗi byte không hợp lệ trong US-ASCII (Lỗi đối số) khi tôi chạy rake db: seed


87

Khi tôi chạy rake db:seedtrong Railsứng dụng của mình , tôi gặp lỗi này:

chuỗi byte không hợp lệ trong US-ASCII (Lỗi đối số)

Tôi vừa thêm science_majorsvà xuống tệp hạt giống của mình và bây giờ khi tôi chạy rake db:seednó cho tôi lỗi này:

lỗi chuỗi byte không hợp lệ

Tại sao lại như vậy, và tôi có thể sửa nó như thế nào?

một phần của hạt. 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

Tôi đã bỏ qua tất cả các trường cao đẳng khác. Cho đến nay, tôi có 200 trường, nhưng Pitt là trường duy nhất có dữ liệu toàn diện cho đến nay. Phần còn lại chỉ có dữ liệu cơ bản, như Harvard. Tôi cũng để lại một số dữ liệu cho Pitt vì mục đích ngắn gọn, nhưng hãy cho tôi biết nếu bạn muốn tôi đưa phần còn lại vào.

Chỉnh sửa: Tôi đã thử lấy ra *từ science_majorstrên xuống và sau đó chạy rake db:seed, nhưng điều đó không thay đổi bất cứ điều gì.

Câu trả lời:


182

Bạn gặp lỗi mã hóa vì hệ thống tệp của bạn không được định cấu hình để mã hóa ngày bạn đã thêm (vì có lẽ nó bao gồm các ký tự mới - có thể trong URL bản đồ được mã hóa thực thể HTML của bạn - không tồn tại trong hạt dữ liệu trước đó của bạn) .

Cách sau sẽ giải quyết lỗi này bằng cách đặt ngôn ngữ UTF-8 trên máy của bạn:

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

Lợi ích của việc đặt ngôn ngữ hệ thống là tất cả các đá quý (về sau) sẽ được đóng gói bằng cách sử dụng mã hóa UTF-8.

BIÊN TẬP:

Ngoài ra, nếu bạn không muốn thay đổi mã hóa hệ thống của mình, bạn có thể đặt toàn bộ dự án mã hóa của mình bằng cách chỉ định một tiêu chuẩn mã hóa trong Gemfile của bạn:

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
Rất vui vì nó đã giúp. Nếu bạn thực hiện phương pháp này, hãy đảm bảo rằng tất cả các môi trường mà bạn đã triển khai dự án của mình đều được đặt ngôn ngữ của chúng thành UTF-8. Nếu không, bạn sẽ cần thêm #encoding utf-8vào đầu tệp của mình để đảm bảo rằng tệp được mã hóa đúng cách, như người đăng khác đã ghi nhận sâu sắc.
zeantsoi

tôi thực sự vừa cố gắng xóa #encoding utf-8 và làm theo những gì bạn nói nhưng nó không hoạt động. ~/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 gói hiển thị [gemname] `để xem nơi cài đặt một viên ngọc trong gói. ~ / collegeanswers >> rake db: seed cào bị hủy bỏ! `bạn có biết tại sao không?
Adam Zerner

rakeLỗi của bạn là gì? Các đá quý hiện có của bạn có thể chưa được định cấu hình để hoạt động với mã hóa hệ thống tệp của bạn. Hãy thử bbundle exec gem uninstall i18n, sau đó bundle install.
zeantsoi

lỗi rake của tôi là invalid byte sequence in US-ASCII (ArgumentError) . Tôi chỉ thử những gì bạn nói và gặp lỗi tương tự.
Adam Zerner

Bạn đã khởi động lại máy chủ web của mình chưa? Đã cập nhật câu trả lời của tôi để cung cấp thêm tùy chọn để hoàn thành những gì bạn đang cố gắng đạt được.
zeantsoi

64

Thêm vào

#encoding: utf-8

ở đầu tệp


Tại sao bây giờ tôi cần làm điều đó, mà trước đây tôi không phải làm vậy?
Adam Zerner

Tôi chỉ thử nó và nó hoạt động btw, vì vậy cảm ơn! Nhưng tôi vẫn muốn biết tại sao trước đây mọi thứ đều hoạt động và bây giờ tôi cần thêm điều đó để nó hoạt động.
Adam Zerner

1
Có lẽ bạn đã thêm một số dấu hiệu utf-8 đặc biệt trong tập tin của bạn .. :)
BvuRVKyUVlViVIc7

Tôi chỉ đọc qua các cập nhật cho câu trả lời của anh chàng kia và nó thực sự toàn diện hơn nên tôi sẽ đánh dấu đó là câu trả lời được chấp nhận, nhưng tôi vẫn thực sự đánh giá cao sự giúp đỡ của bạn!
Adam Zerner

39

Bạn cũng có thể thử export RUBYOPT="-KU -E utf-8:utf-8" như đã đề cập trong chủ đề GH này


Cảm ơn! Đó là điều duy nhất mà giúp vớishotgun-0.9.1/bin/shotgun:94:in `[]': invalid byte sequence in US-ASCII (ArgumentError)
Slava V

18

Nếu bạn đang gặp sự cố này trong một hộp chứa ruby ​​docker, bạn có thể đặt LANG=C.UTF-8:

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

hoặc xem vấn đề này .


hoặc như được thấy trong liên kết trong câu trả lời này, nếu tạo hình ảnh Docker của riêng bạn, hãy thêm 'ENV LANG = C.UTF-8' vào Dockerfile của bạn
Alex

7

Giống như những người khác đề xuất, tôi đã thêm vào #encoding: utf-8đầu tệp (trong trường hợp này là seed.rb), nhưng vẫn không thể làm cho tác vụ rake hoạt động.

Thật thú vị, một người bạn đã khuyên tôi nên xóa các nhận xét bổ sung, do đường ray tạo ra khỏi đầu tệp hạt giống để chỉ #encoding: utf-8còn lại.

Bạn sẽ biết những gì - nó hoạt động.


1

Có một ký tự không hợp lệ trong tệp hạt giống của bạn, trong trường hợp của tôi, việc thay đổi các dấu ngoặc kép từ `thành 'đã được thực hiện.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.