Приложение RoR развернуто на Heroku и работает с базой данных SQL Server - PullRequest
1 голос
/ 21 декабря 2010

Возможно ли иметь приложение Ruby on Rails, которое:

а) развернуто на Heroku и

б) работает с удаленной базой данных SQL Server?

Я так понимаю, мне нужно установить unixODBC на Heroku, но я не могу найти способ сделать это.Это возможно?Или есть какой-нибудь другой способ (без ODBC?) Для этого?

Большое спасибо за любые советы или подсказки.


Обновлено: Некоторыеинформация по теме:

1) Heroku по умолчанию предварительно устанавливает unixODBC и FreeTDS, так что они у вас уже есть.

2) Кроме того, можно запускать команды оболочки через Heroku Consoleв обратных галочках, например:

  heroku console 
  `odbcinst`

(запускает команду "odbcinst" в оболочке Heroku и показывает результат)

3) У вас нет доступа к файловой системе вне вашего слайса, где находятся пакетыустановлены.Если вам нужен только путь к драйверу, поддержка Heroku может предоставить его (/usr/lib/odbc/libtdsodbc.so в моем случае).

4) Вы не можете запускать команды sudo в оболочке Heroku.

На данный момент, чтобы подключиться к MS SQL Server, по крайней мере, вам нужно добавить файл 'freetds.conf'.Даже при использовании tinyTDS (на странице выпуска tinyTDS gitgub есть открытый билет № 2).Инструкции по подключению без DSN от "wiki.rubyonrails.org SLASH: поддержка баз данных SLASH ms-sql" у меня не сработали, я думаю, это соединение требует дополнительной настройки.

'freetds.conf'не может быть изменено без sudo.Поэтому я пришел к выводу, что в настоящее время нет способа заставить MS SQL и Heroku работать вместе.

Мне удалось установить это соединение с EngineYard и activerecord-sqlserver-adapter.

Я следовал этим инструкциям: https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/wiki/Platform-Installation---Ubuntu (есть только некоторые различия в пути к файлу, например, «odbc.ini» находится в «/ etc / unicodbc», а не в «/ etc» - этолегко работать).

Я установил пакеты 'unixODBC' и 'freetds', используя функцию EY Unix Packages, и произвел все конфигурации вручную через SSH.Sudo доступен в EY (пароль не требуется).Также имеется функция Chef Recepes для автоматизации этих конфигураций (кажется, это довольно просто, я собираюсь попробовать это завтра).

Надеюсь, это полезно.

Ответы [ 4 ]

4 голосов
/ 21 декабря 2010

Это возможно.

Поскольку Heroku копирует / символически связывает свои собственные config/database.yml с тем, что вы предоставляете в своем хранилище, вам может потребоваться выполнить дополнительные действия (например, в config/environments/production.rb или в config/initializers/remote_mssql_from_heroku.rb)для правильной настройки приложения.

Однако вы столкнетесь с проблемой - трафик от Heroku к вашей базе данных MSSQL будет проходить через общедоступный Интернет.По умолчанию этот трафик не будет зашифрован.Потенциально каждый человек в мире сможет отслеживать ваш трафик между вашим приложением Heroku и вашей базой данных и даже изменять трафик в полете, будь то в добрых или злонамеренных целях, даже если вы не сможете его обнаружить.MS SQL предлагает возможность подключения по SSL.Эта возможность требует явной настройки на сервере MSSQL, поэтому вы должны иметь возможность доступа и изменения этой конфигурации.Кроме того, эта конфигурация требует, чтобы ваша клиентская библиотека была актуальной и способной общаться с MSSQL через SSL.Обратите внимание, что MSSQL-сервер будет принудительно указывать в сертификате вашего сервера общее имя или альтернативное имя субъекта, точно совпадающие или совпадающие с подстановочными знаками, полного доменного имени сервера (по крайней мере, полное доменное имя, о котором знает сервер), и что клиент использует полное доменное имя для сервераточное совпадение или подстановочный знак одного из имен в сертификате.

1 голос
/ 01 октября 2012

Я успешно использовал следующую статью, в которой используется более новая функция пакета сборки Heroku для использования TinyTDS и удаленного подключения к SQL Server 2008 R2. Я все еще исследую, как я могу зашифровать трафик. Надеюсь, это поможет другим!

http://blog.firmhouse.com/connecting-to-sql-server-from-heroku-with-freetds-here-is-how-on-cedar#

0 голосов
/ 29 октября 2011

У нас похожая проблема, когда нам нужно импортировать старые данные из базы данных SQL Server в наше новое приложение. Данные не являются прямым импортом таблиц, но требуют некоторой обработки и преобразования. Для этого мы создали слой импорта, который находится в частной форме, чтобы не загрязнять новое приложение старыми проблемами преобразования данных. Этот подход также предназначен для обеспечения постепенных обновлений, поскольку по мере приближения к запуску мы будем синхронизировать записи вплоть до момента переключения.

Heroku сказал нам, что подключаться к SQLServer нетривиально, в частности, поскольку они не поддерживают FreeTDS. Их сотрудники службы поддержки рекомендовали запустить экземпляр с гемом импорта с ноутбука в нашем офисе и настроить его для подключения к своей базе данных (для которой требуется выделенная БД, а не бесплатная совместно используемая). Это звучало как самый приемлемый подход к нам.

Во-вторых, в отношении безопасности, о которой упоминал @Justice, мы обсудили настройку SSL для SQLServer с хостинговой компанией, и они указали на сложности этого. Они рекомендовали VPN как более простое решение. Поскольку у нас нет офисного оборудования VPN, самым простым и бесплатным решением оказался туннель SSH.

Мы настроили SSH-туннель от ноутбука к Windows-серверу SQLServer. Это было просто. У нас был установлен CopSSH в Windows (кстати, он поставляется с оболочкой Linux), и мы смогли просто настроить туннель, чтобы ноутбук взаимодействовал с localhost для его соединения с SQLServer, т.е.

ssh -L 1433:localhost:1433 user@windows_server_name

0 голосов
/ 13 сентября 2011

Я не знал, что у Heroku есть FreeTDS? Мне сказали, что нет. TinyTDS при использовании с FreeTDS 0.91 может иметь нулевую зависимость freetds.conf и управляться аргументами соединения во время выполнения. Мы собираемся создать собственный гем Ubuntu 10.4, который статически связывает 0.91 с OpenSSL, чтобы вы могли просто вставить его в Heroku и использовать его для подключения к Azure и / или к вашей собственной внешней БД.

...