我一直在尝试在我们的一个 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 问题。不幸的是,我没有更改数据库名称的选项。
有没有办法引用 '.'字符,以便它将保持“。”以及数据库名称中的后缀?
最佳答案
进一步调查将我带到了 activerecord-sqlserver-adapter 的 github 页面
在那里,我发现了问题 230和 226 ,和我有类似的问题。显然使用“。”在数据库中,表或列名会出现类似的问题。由于这些是在 2012 年创建的并且仍然开放,因此看起来不会很快出现修复。在评论中有一些想法可以通过猴子修补使其正常工作。猜猜这就是我必须采取的方法才能使它正常工作。
更新:对于遇到类似问题的任何人,数据库名称是唯一的问题(不是表或列),我们采用的解决方案是围绕 sqlserver-adapter 进行最终运行。我们为每个数据库创建了一个 SQL 用户,并为该用户分配了一个默认数据库。然后,我们连接到用户登录名,但将数据库名称保留为空。在这种情况下,SQL Server 将连接到默认数据库。
关于ruby-on-rails - 连接失败,数据库名称为 '.',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26889842/