rails 应用程序给出错误“无法从 ru.yml 路径 加载翻译预期它返回一个哈希,但没有”

Posted

技术标签:

【中文标题】rails 应用程序给出错误“无法从 ru.yml 路径 加载翻译预期它返回一个哈希,但没有”【英文标题】:rails app gives error "can not load translations from ru.yml path expected it to return a hash, but does not"rails 应用程序给出错误“无法从 ru.yml 路径 加载翻译预期它返回一个哈希,但没有” 【发布时间】:2012-09-16 23:54:47 【问题描述】:

我的应用程序在本地运行良好,但是当我将其安装到生产服务器时,运行rails server 并请求页面时出现以下错误:

ActionView::Template::Error (can not load translations from app/config/locales/ru.yml, expected it to return a hash, but does not).

我有 YAML 翻译 ru.yml:

ru:
  clients:
    index: 
      title: Список клиентов

调用时发生错误,例如:

%h1=t '.title'

我的开发机器正在运行 Mac OS X ML

生产服务器是安装了 rvm 和 libyaml 的 CentOS 6。

两台服务器都在 Ruby 1.9.2p320 和 Rails 3.2.8 上

【问题讨论】:

在rails控制台中手动阅读它会做什么? YAML.load(File.open('config/locales/ru.yml')) 它给了我以下字符串的错误:default: %d.%m.%Y %H:%M 这一行有问题。我添加了引号:default: '%d.%m.%Y %H:%M' 并得到了一个哈希值。问题已解决,谢谢! 很好,比它可以关闭。 :) @lich 请发布您自己的答案(见下文),这样这个问题就被关闭了,然后它就不会出现了。谢谢! 【参考方案1】:

问题在于使用psych YAML 引擎无法解析带有 % 符号的字符串并产生 SyntaxError 异常。

改用syck 引擎。将以下代码添加到 config/boot.rb 文件的末尾

YAML::ENGINE.yamler = 'syck'

提示:syck 需要 Ruby 版本 >= 2.0.0。

【讨论】:

【参考方案2】:

YAML.load(File.open('config/locales/ru.yml')) 操作在其中一行中给了我错误。

我添加了引号:default: '%d.%m.%Y %H:%M' 并得到了一个哈希值。问题解决了。

【讨论】:

以上是关于rails 应用程序给出错误“无法从 ru.yml 路径 加载翻译预期它返回一个哈希,但没有”的主要内容,如果未能解决你的问题,请参考以下文章

Rails 4 + 设计:密码重置总是在生产服务器上给出“令牌无效”错误,但在本地工作正常。

Rails - 电子邮件确认链接给出“未知操作”错误

Rails 的 ActiveRecord 序列化:attr 方法给出“缺少类或模块错误”

Rails 中的 Spreadsheet.open 给出此错误“未知编码名称 - MACINTOSH”

Rails嵌套属性给出错误:未定义的方法`build_priority'

Rails 类给出 NoMethodError 未定义的方法“每个”