Подключение к sqlserver из heroku

#ruby-on-rails #sql-server #heroku #rails-activerecord #tiny-tds

#ruby-on-rails #sql-сервер #heroku #rails-activerecord #tiny-tds

Вопрос:

у меня есть удаленный экземпляр SQLSERVER, к которому я хочу подключиться из моего приложения rails, размещенного на heroku. Мой gemfile:

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

database.yml

 production:
  adapter: sqlserver
  mode: dblib
  dataserver: host.database.windows.net
  database: items
  username: username@host
  password: password
  azure: true
  

production.rb

 dbconfig = YAML.load(ERB.new(File.read(File.join("config","database.yml"))).result)
ActiveRecord::Base.establish_connection dbconfig['production']
  

Но я получаю следующую ошибку во время процесса развертывания:

Запись config/database.yml для чтения из DATABASE_URL

 Preparing app for Rails asset pipeline

Running: rake assets:precompile

rake aborted!

LoadError: Please install the sqlite3 adapter: `gem install activerecord-sqlite3-adapter` (sqlite3 is not part of the bundle. Add it to Gemfile.)
  

Кажется, что для активной записи требуется sqlite3, но если у меня есть tiny_tds, он должен использовать sql server.

В среде разработки все работает нормально. Уверен, что мне чего-то не хватает.

Обновить

Я уже настроил пользовательский buildpack BUILDPACK_URL: https://github.com/firmhouse/heroku-buildpack-ruby-freetds.git и переменная конфигурации DATABASE_URL.

ОБНОВЛЕНИЕ 2

Создание pp из dbconfig var при развертывании отображает это

 {"production"=>
       {"adapter"=>"sqlite3",
       "database"=>"dbname",
       "username"=>"user",
       "password"=>"pass",
       "host"=>"127.0.0.1"}}
  

Кажется, что heroku перезаписывает мой файл database.yml, есть предложения?

ОБНОВЛЕНИЕ 3

Я установил DATABASE_URL=sqlserver//user:pass@host:1433/database разве это неправильно?

Комментарии:

1.Это весь ваш Gemfile? Используете ли вы sqlite для тестирования / разработки / постановки? Настроена ли ваша среда Heroku на что-то другое, кроме производства? heroku config:get RAILS_ENV heroku config:get RACK_ENV

2. Нет, env работает, я заметил, что при печати dbconfig при развертывании отображается {"production"=> {"adapter"=>"sqlite3", "database"=>"dbname", "username"=>"user", "password"=>"pass", "host"=>"127.0.0.1"}} это, кажется, что heroku перезаписывает мой файл database.yml

3. Да, heroku делает это, поэтому ваша загрузка в production.rb не сработает. Похоже, что buildpack хочет, чтобы все данные пользователя / передачи / хоста / порта были в DATABASE_URL, поэтому не должно быть необходимости загружать его из yml подобным образом.

4. @Unixmonkey да, я тоже наконец понял это, затем я настроил переменную DATABASE_URL следующим образом heroku config:set DATABASE_URL=sqlserver//user:pass5@host:1433/database но печать database.yml во время развертывания все равно печатает это {"adapter"=>"sqlite3", "database"=>"dbname", "username"=>"user", "password"=>"pass", "host"=>"127.0.0.1"}

5. Не имеет значения, что такое database.yml, если он не используется. Удалите эти строки из production.rb и установите config.assets.initialize_on_precompile = false для предотвращения попыток загрузки базы данных во время компиляции ресурсов.

Ответ №1:

Я столкнулся с той же проблемой и, наконец, нашел ответ.

Вы должны указать суффикс ниже:

?encoding=uft-8amp; azure= true

Итак, ваш database_url будет выглядеть следующим образом:

sqlserver://[user]:[password]@[server.database.windows.net]:1433/[database]?encoding=uft-8amp;azure=true

Надеюсь, это поможет

Ответ №2:

Похоже, вам нужно использовать пользовательский buildpack.

Используя этот пакет сборки FreeTDS на Heroku

Чтобы использовать этот пакет сборки, вы можете передать опцию при создании своего приложения Heroku:

 heroku create my_new_sqlserver_app --buildpack https://github.com/firmhouse/heroku-buildpack-ruby-freetds.git
  

Или для текущих приложений:

 heroku config:add BUILDPACK_URL=https://github.com/firmhouse/heroku-buildpack-ruby-freetds.git
  

Настройка подключения к базе данных

После создания вашего приложения или настройки существующего приложения для использования buildpack вам необходимо изменить переменную DATABASE_URL config, чтобы указать на ваш экземпляр sqlserver. В настоящее время мы используем SQL Server 2008 Express edition:

 heroku config:add DATABASE_URL=sqlserver://username:password@sqlserver_host:1433/database_name
  

Комментарии:

1. Привет, я уже использую эту пользовательскую сборку, и я также добавил параметр конфигурации DATABASE_URL, чтобы обновить свой ответ. Без этого buildpack не удалось установить драгоценный камень tiny_tds.