花岗岩ORM +光纤+ mysql =意外的EOF(例外)?

时间:2018-05-17 22:50:21

标签: crystal-lang amber-framework

是否可以在Granite中使用Fibers?我没有理由相信,直到我试图为它编写一些代码。我正在尝试学习使用光纤,因此也许不正确的光纤实现也可能是原因。以下代码导致异常。有什么提示可以解决这个问题吗?

  lines = File.read_lines INVENTORY_FILE
  channel = Channel(Int32).new(199)
  lines[0..200].each do |line|
    row_number += 1
    proc = ->(line : NamedTuple(item_number: String) do
      spawn do
        sku = Sku.find_by :item_number, item_number
        channel.send(1)
      end
    end
    proc.call({ line: line })
  end

  199.times do |i|
    channel.receive
  end

以上结果导致从第一个光纤尝试访问DB开始的以下重复异常。我确保MySQL处于工作状态,并且代码在不使用光纤时有效:

Unexpected EOF (Exception)
    from lib/mysql/src/mysql/read_packet.cr:38:18 in 'read_byte!'
    from lib/mysql/src/mysql/read_packet.cr:63:5 in 'read_int'
    from lib/mysql/src/mysql/packets.cr:13:7 in 'read'
    from lib/mysql/src/mysql/connection.cr:63:14 in 'read_packet'
    from lib/mysql/src/mysql/connection.cr:22:19 in 'initialize'
    from lib/mysql/src/mysql/connection.cr:4:3 in 'new'
    from lib/mysql/src/mysql/driver.cr:3:5 in 'build_connection'
    from lib/db/src/db/pool.cr:255:3 in 'build_resource'
    from lib/db/src/db/pool.cr:34:22 in 'checkout'
    from lib/db/src/db/pool.cr:65:7 in 'checkout_some'
    from lib/db/src/db/database.cr:99:7 in 'checkout_some'
    from lib/db/src/db/pool_prepared_statement.cr:35:24 in 'build_statement'
    from lib/db/src/db/pool_prepared_statement.cr:53:22 in 'initialize'
    from lib/db/src/db/pool_prepared_statement.cr:11:5 in 'new'
    from lib/db/src/db/database.cr:89:7 in 'build_prepared_statement'
    from lib/db/src/db/database.cr:7:15 in 'fetch_or_build_prepared_statement'
    from lib/db/src/db/session_methods.cr:23:9 in 'build'
    from lib/db/src/db/query_methods.cr:38:7 in 'query'
    from lib/granite/src/granite/querying.cr:53:12 in 'find_by'
    from /usr/share/crystal/src/kernel.cr:0:3 in '~procProc(Nil)'
    from /usr/share/crystal/src/fiber.cr:255:3 in 'run'
    from /usr/share/crystal/src/concurrent.cr:0:3 in '~proc2Proc(Fiber, (IO::FileDescriptor | Nil))'
    from ???

0 个答案:

没有答案