【发布时间】:2015-08-13 17:40:20
【问题描述】:
我正在使用yaml_db gem 将我的数据库从PHP/mySQL 迁移到RoR/Postgres。当我运行时,我在输入 YAML 文件的第 1555870 行(约 4M)上收到上述错误:
bundle exec rake db:data:load RAILS_ENV=production
它似乎取决于行或大小 - 我已将其缩小到这一特定行,目前对此有评论:
-
slot_id: '2628865'
sheet_id: '18485'
label: '10:20am to 12:20pm'
name: 'Jim Watson'
email: ''
#bad here - moving "breakrighthere" before this comment throws error related to bad syntax
breakrighthere
-
slot_id: '2628866'
sheet_id: '18485'
label: '2:35pm to 3:05pm'
name: 'Christy Brown'
email: ''
堆栈跟踪:
rake aborted!
Psych::SyntaxError: (<unknown>): control characters are not allowed at line 1 column 1
/home/signup/app/releases/11/vendor/bundle/ruby/2.1.0/gems/yaml_db-0.3.0/lib/yaml_db.rb:61:in `load_documents'
/home/signup/app/releases/11/vendor/bundle/ruby/2.1.0/gems/yaml_db-0.3.0/lib/serialization_helper.rb:57:in `block in load'
/home/signup/app/releases/11/vendor/bundle/ruby/2.1.0/gems/activerecord-4.2.0/lib/active_record/connection_adapters/abstract/database_statements.rb:213:in `block in transaction'
/home/signup/app/releases/11/vendor/bundle/ruby/2.1.0/gems/activerecord-4.2.0/lib/active_record/connection_adapters/abstract/transaction.rb:188:in `within_new_transaction'
/home/signup/app/releases/11/vendor/bundle/ruby/2.1.0/gems/activerecord-4.2.0/lib/active_record/connection_adapters/abstract/database_statements.rb:213:in `transaction'
/home/signup/app/releases/11/vendor/bundle/ruby/2.1.0/gems/yaml_db-0.3.0/lib/serialization_helper.rb:56:in `load'
/home/signup/app/releases/11/vendor/bundle/ruby/2.1.0/gems/yaml_db-0.3.0/lib/serialization_helper.rb:31:in `load'
/home/signup/app/releases/11/vendor/bundle/ruby/2.1.0/gems/yaml_db-0.3.0/lib/tasks/yaml_db_tasks.rake:35:in `block (3 levels) in <top (required)>'
Tasks: TOP => db:data:load
(See full trace by running task with --trace)
有什么想法吗?
【问题讨论】:
-
是否有一些不可见的控制字符滑入 YAML?你能
cat -vet那块 YAML 看看有没有什么奇怪的东西出现吗? -
好建议@mu,但我看到的只是'$'行终止符。
-
有什么理由不只是从 MySQL 中转储 CSV 并在 PostgreSQL 中进行 COPY 以加载数据?您必须手动重写架构,但这不应该那么困难。或者看看其他不使用 YAML 的工具,对于这样的任务,YAML 似乎是一个非常奇怪的选择。
-
谢谢@mu。我切换到 CSV,稍加注意,在服务器上使用了一些 sed/perl 命令,它看起来很棒。感谢您的帮助 - 如果您输入此作为答案,我会接受。
-
我觉得我没有回答任何问题,我只是指出了一些可能的替代方案。一个简单的“谢谢”是我应得的。现在,如果我已经通过那个 gem 来找出它为什么会产生无效的 YAML...
标签: ruby postgresql rake yaml ruby-on-rails-4.2