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 的 ActiveRecord 序列化:attr 方法给出“缺少类或模块错误”
Rails 中的 Spreadsheet.open 给出此错误“未知编码名称 - MACINTOSH”