使用非ASCII字符播种Rails

时间:2014-04-22 14:58:52

标签: ruby-on-rails ruby windows

我很犹豫再次问这个问题,因为这里有很多问题都有相同标题的变体,但没有一个能解决我的问题:(

当我运行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

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}"

试试吧。