tiny_tds: ошибка сегментации

Это похоже на этот вопрос. Однако ответ, опубликованный на этот вопрос, у меня не сработал. Я установил freetds на свой Mac. Я указал следующее в моем GemFile.

gem 'tiny_tds'
gem 'activerecord-sqlserver-adapter', '~> 4.1.0'

И я могу успешно подключиться к Azure SQL, используя следующее:

tsql -H host_name.database.windows.net -U user_name -D database_name -p 1433 -P password

Я также могу успешно подключиться к Azure SQL на irb.

require 'tiny_tds'
client = TinyTds::Client.new(:username => 'user_name@host_name', :password => 'password', :host =>'host_name.database.windows.net')

Но когда я запускаю rake db:migrate, я получаю следующую ошибку:

[BUG] Segmentation fault at 0x007fff5f3ffff8
ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-darwin12.0]

Затем следует,

Control frame information
C level backtrace information
Other runtime information

Наконец, заканчивая,

[NOTE]
You may have encountered a bug in the Ruby interpreter or extension libraries.
Bug reports are welcome.
For details: http://www.ruby-lang.org/bugreport.html

Abort trap: 6

Кто-нибудь может поделиться идеями или предложениями?

Обновление: My Database.yml выглядит так:

development:
  #adapter: sqlite3
  #database: db/development.sqlite3
  #pool: 5
  #timeout: 5000
  adapter: sqlserver
  mode: dblib
  dataserver:
  host: host_name.database.windows.net
  port: 1433
  database: database_name
  username: user_name
  password: password
  timeout: 5000
  azure: true

Я запустил следующее в IRB,

2.1.1 :028 > ActiveRecord::Base.establish_connection(
2.1.1 :029 >        :adapter  => "sqlserver",
2.1.1 :030 >        :host     => "host_name.database.windows.net",
2.1.1 :031 >        :username => "user_name",
2.1.1 :032 >        :password => "password",
2.1.1 :033 >        :database => "database_name"
2.1.1 :034?>    )

и получил следующий ответ,

 => #<ActiveRecord::ConnectionAdapters::ConnectionPool:0x00000101e8c798 @mon_owner=nil, @mon_count=0, @mon_mutex=#<Mutex:0x00000101e8c748>, @spec=#<ActiveRecord::ConnectionAdapters::ConnectionSpecification:0x00000101f3ceb8 @config={:adapter=>"sqlserver", :host=>"host_name.database.windows.net", :username=>"user_name", :password=>"password", :database=>"database_name"}, @adapter_method="sqlserver_connection">, @checkout_timeout=5, @dead_connection_timeout=5, @reaper=#<ActiveRecord::ConnectionAdapters::ConnectionPool::Reaper:0x00000101e8c720 @pool=#<ActiveRecord::ConnectionAdapters::ConnectionPool:0x00000101e8c798 ...>, @frequency=nil>, @size=5, @reserved_connections=#<ThreadSafe::Cache:0x00000101e8c6d0 @backend={}, @default_proc=nil>, @connections=[], @automatic_reconnect=true, @available=#<ActiveRecord::ConnectionAdapters::ConnectionPool::Queue:0x00000101e8c658 @lock=#<ActiveRecord::ConnectionAdapters::ConnectionPool:0x00000101e8c798 ...>, @cond=#<MonitorMixin::ConditionVariable:0x00000101e8c630 @monitor=#<ActiveRecord::ConnectionAdapters::ConnectionPool:0x00000101e8c798 ...>, @cond=#<Thread::ConditionVariable:0x00000101e8c608>>, @num_waiting=0, @queue=[]>> 

person Indrajeet    schedule 22.06.2014    source источник
comment
как выглядит ваш файл database.yml?   -  person blotto    schedule 26.06.2014
comment
@blotto Я обновил свой вопрос с помощью database.yml.   -  person Indrajeet    schedule 26.06.2014
comment
Повторите то, что вы сделали с Ruby, используя rails c, а не irb. Ruby с загруженной средой Rails — гораздо более сложный зверь, и только Ruby. NB Я столкнулся с похожей проблемой, которая оказалась конфликтом имен между нативными библиотеками. Это должно быть выведено из обратной трассы, если это проблема.   -  person Gene    schedule 30.06.2014
comment
@Indrajeet Я тоже столкнулся с той же проблемой. Как вы решили? Поскольку это довольно старый пост, я думаю, вы бы решили его.   -  person Imran Ahmad    schedule 14.04.2021


Ответы (1)


Я бы упростил вашу конфигурацию database.yml, урезав до самого необходимого.

development:
 adapter: sqlserver
 host: "host.database.windows.net"
 port: 1433
 database: <database>
 username: <username>
 password: <password>
 timeout: 5000

Но сначала попробуйте эмулировать экземпляр подключения, который будет выполняться с помощью задачи db:migrate в IRB как таковой.

 ActiveRecord::Base.establish_connection(
   :adapter  => "sqlserver",
   :host     => "host.database.windows.net",
   :username => <username>,
   :password => <password>,
   :database => <database>
 ) 

Если это удалось, используйте только эти значения в файле database.yml. Если вам нужно добавить больше значений конфигурации, добавляйте по одному. Хотя эти основные конфигурации должны работать.

person blotto    schedule 26.06.2014
comment
Я эмулировал экземпляр подключения в IRB и обновил свой вопрос ответом. Есть ли способ сделать вывод из ответа, если экземпляр подключения выполнен успешно. - person Indrajeet; 27.06.2014
comment
экземпляр, который вы разместили, выглядит успешно. Вы обрезали конфиги database.yml только до этих значений? закомментируйте все остальные. попробуйте db: миграция снова - person blotto; 27.06.2014
comment
Я получаю эту ошибку, когда пытаюсь выполнить db:migrate, -----> rake aborted! TinyTds::Error: инструкция USE не поддерживается для переключения между базами данных. Используйте новое подключение для подключения к другой базе данных. - person Indrajeet; 28.06.2014