【问题标题】:Is there any gem can dump the data from and to yml files?是否有任何 gem 可以将数据从 yml 文件转储到 yml 文件?
【发布时间】:2010-06-21 08:51:40
【问题描述】:

我一整天都在寻找这样的宝石,但没有找到好的。我想写一个,但我做不到。

我数据库中的数据可能是英文文本,会被转储到纯文本的 yml 文件中。还有一些是非英文文本,会是二进制类型。

而且它们都可能有这样的代码:

<% xxx %>

当我使用rake db:fixtures:load将它们加载到数据库中时,可能会出现错误:method xxx not found

我不想找到一个好的宝石可以解决这个问题。感谢您的帮助


更新

我已经放弃寻找这样的宝石了。起初,我认为这是一件容易的事,但现在,经过一些研究,我不得不说,这比我想象的要难得多。

【问题讨论】:

    标签: ruby-on-rails ruby yaml


    【解决方案1】:

    您遇到问题的原因是夹具加载器会在加载数据之前通过 erb 传递您的夹具。这意味着如果您的 yaml 文件中有 ,那么 Rails 会将其视为 erb 并尝试运行一个名为 xxx 的方法。

    似乎没有一种简单的方法可以关闭灯具的 erb 处理。我尝试用 CSV 固定装置替换固定装置,这仍然会进行 ERB 预处理。

    如果没有一个简单的答案,我不得不问一个问题,为什么你的文件中有这些字符串?

    你想让它们被 erb 扩展吗?

    【讨论】:

    • 我同意你的说法,我尝试了很多,发现无法解决这个问题(如果内容是英文且简短,to_yaml() 将使用纯文本。如果内容有非英文, to_yaml 将使用二进制。简单替换是行不通的)。
    • 我的文件包含这样的字符串,因为数据库中的内容是一些代码,其中包含这样的erb代码。我希望rake db:dump:fixtrues 不要把他们当作 erb。
    • 我希望将数据库的所有数据转储到yml文件中,然后再加载回来。但是现在,我不得不说,这是一项非常困难的任务(例如,序列不会转储到文件中,当您加载回来时,数据库的序列将具有无效的当前值)。所以我放弃了,转而使用数据库备份/恢复工具。
    【解决方案2】:

    Err...我不确定您是否真的需要宝石? Rails 本身可以将任何模型转换为 YAML。

    假设您有一个名为“对象”的模型。您可以选择如下所示的路线:

    /objects.yaml
    

    你会得到一个包含 YAML 形式的所有对象的巨大文本文件。

    当然,你会想要这样的东西:

    respond_to do |format|
      format.yaml {render  :yaml => @objects}
    end
    

    在您的宁静控制器中。

    如果您不想按路线执行此操作,您可以随时执行

    @yaml = []
    @objects.each do |object|
    @yaml.push object.to_yaml
    end
    

    在 ruby​​ 中的任何地方,它将为您提供一个 yaml 对象数组,然后您可以在闲暇时将其写入文件。

    我想如果 rails 本身正在生成 yaml,那么它以后就可以将它作为夹具加载?

    【讨论】:

    • 当我将数据库转储到 yaml 文件时,我在 rails 环境中使用object.to_yaml。但是,不幸的是,当加载回来时,rails 会将其视为 erb 代码,而不是纯文本。我已经放弃寻找这样的宝石,也许这是不可能的任务。谢谢你的回答。
    猜你喜欢
    • 2021-04-27
    • 1970-01-01
    • 2022-10-20
    • 2012-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-09
    相关资源
    最近更新 更多