获取语法错误:期望令牌'EOF',而不是'结束',并找不出原因
问题描述:
所以,我试图实现一种方法来添加数据库迁移没有ORM/ODM为我的SQLite3数据库和错误我得到(syntax error: expecting token 'EOF', not 'end'
)是这个代码:获取语法错误:期望令牌'EOF',而不是'结束',并找不出原因
src/project/database/migration/migrations/1.cr
:
require "../migration"
module Project
ver = 1
migration = Migration.new ver
migration.register_up |db| do
db.exec "create table version (version int)"
db.exec "insert into version values (?)", ver
end
migration.register_down |db| do
db.exec "drop table version"
end
Migrations[ver] = migration
end
我看不出与语法的紧迫问题。该文件导入下面的文件,因为它需要的类和线Migrations = [] of Migration
:
src/project/database/migration/migration.cr
:
require "db"
require "sqlite3"
module Project
Migrations = [] of Migration
class Migration
def initialize(@version : Int)
end
# Registers a callback that will be called when the `up`-method is called.
# The callback must return either `true` for a successful migration,
# or `false` for a failed migration. If an `up` migration has
# failed, the `down` migration will be called to restore the database
# back to its previous state.
# The callback will receive an instance of `DB::Database`
#
# Example:
#
# ```
# migration = Migration.new(1)
#
# migration.register_up |db| do
# # Advance migration
# end
#
# migration.register_down |db| do
# # Recede migration
# end
# ```
def register_up(&block : (DB::Database) -> Bool)
@up = block
end
# Registers a callback that will be called when the `down`-method is called.
# See the `register_up` method for more information
def register_down(&block : (DB::Database) -> Bool)
@down = block
end
# Advances DB to the next version
def up(conn : DB::Database)
result = @up.call(conn)
unless result
# Failed migration, rollback
@down.call(conn)
raise Exception.new(`Failed to migrate database to version: #{@version}. Rolling back.`)
end
end
# Recedes DB to the previous version
def down(conn : DB::Database)
result = @down.call(conn)
unless result
# Failed migration, rollback
@up.call(conn)
raise Exception.new(`Failed to migrate database to version: #{@version - 1}. Rolling back.`)
end
end
end
end
任何想法?
答
语法错误是在这里:
migration.register_up |db| do
# ...
end
应该是:
migration.register_up do |db|
# ...
end
而且在register_down
相同。
请参见Blocks and Procs中的“Yield arguments”部分。