我一直试图在我们的某个rails应用中调试SQL Server数据库错误。问题是数据库名称(在database.yaml中添加)中包含'.'
('testdb.v1'
)。它导致错误:
TinyTds::Error: Database 'testdb' does not exist. Make sure that the name is entered correctly.
认为这是一个YAML与Rails问题引用了'。'我在rails控制台中打开了应用程序并尝试了我能想到的各种Ruby引用,但每次都会得到相同的错误。
在我的model.connection_config
中分配数据库名称的某个地方,'。'被解释为格式说明符,并从名称中删除后缀。 model.connection_config['database']
已尽可能'testdb.v1'
,但显然不是将其传递给SQL Server。
我不确定这是一个rails问题还是一个SQL Server问题,虽然我一起扔的C#应用程序设法打开数据库没有问题。因此,我认为它是rails / ActiveRecord问题。不幸的是,我没有选择更改数据库名称。
有没有办法引用'。'性格,以便它将保持'。和数据库名称中的后缀?
答案 0 :(得分:2)
进一步调查将我带到了activerecord-sqlserver-adapter
的github页面在那里,我发现问题230和226,与我的问题类似。显然使用'。'在数据库,表或列名称中会出现类似的问题。由于这些是在2012年创建的并且仍处于打开状态,因此看起来不会很快出现修复。在评论中有一些想法可以将其修补到工作状态。猜猜这是我必须采取的方法来实现这一目标。
更新:对于遇到类似问题的人来说,数据库名称是唯一的问题(不是表或列),我们使用的解决方案是围绕sqlserver-adapter的最终运行。我们为每个数据库创建了一个SQL用户,并为该用户分配了一个默认数据库。然后,我们使用用户登录进行连接,但将数据库名称保留为null。在这种情况下,SQL Server将连接到默认数据库。