我很犹豫再次问这个问题,因为这里有很多问题都有相同标题的变体,但没有一个能解决我的问题:(
当我运行db:seed
rake任务时,我得到一个错误" US-ASCII(参数错误)"中的字节序列无效。大概是因为其中一个表包含非ASCII字符。它应该,而且必须这样,所以这里涉及用ASCII替换非ASCII字符的解决方案对我没有帮助。
在此处的其他答案中,我尝试添加:
# encoding: utf-8
或
# ruby encoding: utf-8
或
# -*- coding: utf-8 -*-
到我的种子文件的顶部,但它没有任何区别。我也尝试将它们添加到bin/rake
的顶部(在这种情况下是shebang之后)。
我尝试添加:
if RUBY_VERSION =~ /1.9/
Encoding.default_external = Encoding::UTF_8
Encoding.default_internal = Encoding::UTF_8
end
到我的gemfile的顶部。
这些都没有任何区别。我还尝试卸载i18n
gem并重新安装它,这也没有任何区别。
那么怎么做我得到rake用非ASCII数据播种我的文件?
这是Windows 8.1,Ruby 1.9.3下的Rails项目,顺便提一下,所有东西都在默认位置。
提前致谢。
编辑:完全回溯: -
C:\RailsInstaller\Ruby1.9.3\bin\ruby.exe -e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift) C:/Users/User/RubymineProjects/TrafficForecast/bin/rake --trace db:seed
** Invoke db:seed (first_time)
** Execute db:seed
** Invoke db:abort_if_pending_migrations (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:abort_if_pending_migrations
rake aborted!
C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/rake- 10.3.1/lib/rake/trace_output.rb:16:in `block in trace_on': invalid byte sequence in US-ASCII (ArgumentError)
from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/rake-10.3.1/lib/rake/trace_output.rb:14:in `map'
from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/rake-10.3.1/lib/rake/trace_output.rb:14:in `trace_on'
from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/rake-10.3.1/lib/rake/application.rb:372:in `trace'
from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/rake-10.3.1/lib/rake/application.rb:218:in `display_exception_message_details'
from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/rake-10.3.1/lib/rake/application.rb:205:in `display_exception_details'
from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/rake-10.3.1/lib/rake/application.rb:198:in `display_error_message'
from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/rake-10.3.1/lib/rake/application.rb:185:in `rescue in standard_exception_handling'
from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/rake-10.3.1/lib/rake/application.rb:176:in `standard_exception_handling'
from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/rake-10.3.1/lib/rake/application.rb:75:in `run'
from C:/Users/User/RubymineProjects/TrafficForecast/bin/rake:5:in `<top (required)>'
from -e:1:in `load'
from -e:1:in `<main>'
Process finished with exit code 1
答案 0 :(得分:2)
为什么不尝试Ruby 2.0+来执行rake任务,因为它的默认编码是UTF-8 :)顺便说一下,你可以使用pik在windows下切换你的ruby版本。
我在使用rails 4.0.0在ruby 1.9.3下测试时遇到了同样的错误。我正在将# encoding: utf-8
添加到相关模型文件的第一行,因为我还有UTF-8字符串。例如:
seeds.rb
# coding: utf-8
...
Project.create({:name=>"#{UTF8_char}"})
模型/ project.rb
# coding: utf-8
...
str = "#{another_UTF8_char}"
试试吧。