#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.yml3. Да, 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.