【问题标题】:Connecting to SQL-Azure in rails using tiny_TDS: [BUG] Segmentation fault使用 tiny_TDS 在 Rails 中连接到 SQL-Azure:[BUG] 分段错误
【发布时间】:2016-04-14 15:59:09
【问题描述】:

我们正在尝试让 rails 与 Azure 上的 sqlserver 数据库通信,我们安装了带有 openssl 和 libiconv 的 freeTDS:

./configure --prefix=/usr/local --with-libiconv-prefix=DIR --with-openssl=DIR
make
make install

然后我们将 tiny_TDS 和 activerecord-sqlserver-adapter 添加到 gemfile:

gem 'tiny_tds'
gem 'activerecord-sqlserver-adapter'

$ bundle install

配置数据库:

development:  
  adapter: sqlserver
  host: xxxxxxx.database.windows.net
  mode: DBLIB
  port: 1433
  database: xxxxx
  username: xxxxxxxx
  password: x
  azure: true

运行服务器:

$ rails s

到目前为止一切正常,但是一旦您访问该站点,ruby 就会崩溃。

steven@jenny:~/irr$ rails server -p 3001
=> Booting WEBrick
=> Rails 3.0.4 application starting in development on http://0.0.0.0:3001
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2012-07-24 15:37:00] INFO  WEBrick 1.3.1
[2012-07-24 15:37:00] INFO  ruby 1.9.2 (2012-02-14) [x86_64-linux]
[2012-07-24 15:37:00] INFO  WEBrick::HTTPServer#start: pid=7586 port=3001
/home/steven/.rvm/gems/ruby-1.9.2-p318/gems/tiny_tds-0.5.1/lib/tiny_tds/client.rb:68: [BUG] Segmentation fault
ruby 1.9.2p318 (2012-02-14 revision 34678) [x86_64-linux]

-- control frame ----------
c:0048 p:---- s:0232 b:0232 l:000231 d:000231 CFUNC  :connect
c:0047 p:0429 s:0228 b:0228 l:000227 d:000227 METHOD /home/steven/.rvm/gems/ruby-1.9.2-p318/gems/tiny_tds-0.5.1/lib/tiny_tds/client.rb:68

我们尝试了多个版本的 ruby​​:1.9.2-p318、1.9.2-p320、1.9.3-p125。所有这些错误都相同。

这是在 ubuntu 11.10 上使用 rvm 和 FreeTDS-0.9.1。

关于解决方法的任何想法?

我是不是在途中的某个地方出错了?

编辑

IRB 的输出:

require 'tiny_tds'
client = TinyTds::Client.new(:username =>'XXXXX@XXXXXXX.database.windows.net', :password => 'XXXXXXX', :host => 'XXXXXX.database.windows.net',  :mode => 'DBLIB', :azure => 'true')
SystemStackError: stack level too deep from /home/martinr/.rvm/rubies/ruby-1.9.2-p320/lib/ruby/1.9.1/irb/workspace.rb:80
Maybe IRB bug!!

这似乎是 ruby​​ 本身的一个错误:

/home/martinr/.rvm/gems/ruby-1.9.2-p320/gems/tiny_tds-0.5.1/lib/tiny_tds/client.rb:68: [BUG] Segmentation fault (core dumped)

【问题讨论】:

    标签: ruby ruby-on-rails-3 azure-sql-database tiny-tds


    【解决方案1】:

    您应该只做一个简单的 IRB 提示,然后执行 TinyTDS 中提到的类似操作。

    require 'tiny_tds' client = TinyTds::Client.new(...)

    填写您的连接参数。简单的东西,如用户名、密码和主机。让我知道事情的进展。

    【讨论】:

    • 感谢您的回复,将 IRB 的输出添加到问题中。
    • 我已经让它在另一台机器上与 sqlserver 一起工作,它似乎只是在尝试连接到 azure 时。 sql-azure 的密码有“*%^$)”之类的特殊字符,我感觉这可能是导致问题的原因。我正在尝试让数据库管理员将密码更改为特殊字符较少的密码以测试理论。
    • @Martinffx 像“*%^$)”这样的密码真的有问题吗?因为我也遇到了类似的错误..
    【解决方案2】:

    错误似乎是由用户名username@servername引起的

    当您删除 @severname 部分时,ruby 不再崩溃

    【讨论】:

      猜你喜欢
      • 2014-08-12
      • 2017-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-21
      • 1970-01-01
      • 2019-03-29
      • 1970-01-01
      相关资源
      最近更新 更多