Rooku应用程序部署在Heroku上并使用SQL Server数据库

时间:2010-12-20 22:31:19

标签: ruby-on-rails sql-server odbc heroku engineyard

拥有Ruby on Rails应用程序是否可行,即:

a)部署在Heroku上,

b)使用远程SQL Server数据库吗?

我认为我需要在Heroku上安装unixODBC,但我找不到办法。这可能吗? 或者,有没有其他方法(没有ODBC?)来实现这一目标?

非常感谢您的任何指导或提示。


更新 关于这个主题的一些信息:

1)Heroku默认预安装unixODBC和FreeTDS,所以你已经拥有了它们。

2)此外,可以通过Heroku Console在反引号中运行shell命令,例如:

  heroku console 
  `odbcinst`

(在Heroku shell中运行“odbcinst”命令并显示结果)

3)您无权访问安装软件包的切片之外的文件系统。如果你只需要一个驱动程序路径,Heroku支持可以提供它(在我的情况下是/usr/lib/odbc/libtdsodbc.so)。

4)你无法在Heroku shell中运行sudo命令。

目前,要连接到MS SQL Server,您至少需要附加'freetds.conf'文件。即使使用tinyTDS(在tinyTDS gitgub问题页面中有一个开放票#2)。来自“wiki.rubyonrails.org SLASH数据库支持SLASH ms-sql”的无DSN连接说明对我来说不起作用,我想这个连接需要一些额外的配置。

没有sudo就无法修改'freetds.conf'。因此,我得出结论,目前没有办法让MS SQL和Heroku一起工作。

我已设法使用EngineYard和activerecord-sqlserver-adapter建立此连接。

我按照这些说明操作: https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/wiki/Platform-Installation---Ubuntu (只有一些文件路径差异,例如'odbc.ini'位于'/ etc / unicodbc',而不是'/ etc' - 这很容易解决。)

我使用EY Unix Packages功能安装了'unixODBC'和'freetds'软件包,并通过SSH手动完成了所有配置。 Sudo在EY有售(无需密码)。还有Chef Recepes功能可以自动完成这些配置(看起来很简单,明天我会试一试)。

希望这有用。

4 个答案:

答案 0 :(得分:4)

有可能。

因为Heroku通过您在存储库中提供的任何内容复制/符号链接自己的config/database.yml,您可能需要采取其他步骤(例如在config/environments/production.rbconfig/initializers/remote_mssql_from_heroku.rb中)来设置适当地申请。

然而,您将面临挑战,即从Heroku到MSSQL数据库的流量将遍历公共互联网。默认情况下,此流量不会被加密。世界上每个人都可以监控您的Heroku应用程序和数据库之间的流量,甚至可以改变飞行中的流量,无论是出于良性还是恶意目的,而无法检测到它。 MS SQL提供通过SSL连接的功能。此功能需要在MSSQL服务器中进行显式配置,因此您必须能够访问和修改该配置。此外,此配置要求您的客户端库是最新的,并且能够通过SSL与MSSQL通信。请注意,MSSQL服务器将强制您的服务器证书列出与服务器的FQDN完全匹配或通配符匹配的公共名称或主题备用名称(至少是服务器知道的FQDN),以及客户端使用服务器的FQDN完全匹配或通配符匹配证书上的其中一个名称。

答案 1 :(得分:1)

我成功使用了以下使用Heroku较新的buildpack功能的文章来使用TinyTDS并远程连接到SQL Server 2008 R2。我还在调查如何加密流量。希望这有助于其他人!

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

答案 2 :(得分:0)

我不知道Heroku上有FreeTDS吗?我被告知他们没有。如果与FreeTDS 0.91一起使用,TinyTDS可以具有零freetds.conf依赖性并且由运行时连接args驱动。我们正在研究构建一个Ubuntu 10.4本机gem,它将0.91与OpenSSL静态链接,因此你可以将它放入Heroku,然后将它连接到Azure和/或你拥有外部数据库。

答案 3 :(得分:0)

我们遇到了类似的问题,我们需要将旧数据从SQL Server数据库导入我们的新应用程序。数据不是直接表导入,但需要进行一些处理和转换。我们为此构建了一个导入层,它位于私有gem中,以便不会因旧数据转换问题而污染新应用程序。这种方法还旨在允许增量更新,随着我们接近启动,我们将保持同步记录直到切换时刻。

Heroku告诉我们,连接到SQLServer并不容易,特别是因为它们不支持FreeTDS。他们的支持人员建议使用我们办公室的笔记本电脑中的导入gem来运行实例,并将其配置为连接到他们的数据库(这需要专用的数据库,而不是免费的共享数据库)。这听起来像是对我们来说最可口的方法。

其次,关于@Justice提到的安全性,我们讨论了为托管公司配置SQLServer的SSL,并指出了其复杂性。他们建议VPN作为一种更简单的解决方由于我们没有办公室端的VPN硬件,最简单和免费的解决方案被证明是一个SSH隧道。

我们已经建立了从笔记本电脑到SQLServer Windows框的SSH隧道。那很简单。我们在Windows上安装了CopSSH(顺便提一下,它带有一个Linux shell)我们能够简单地建立一个隧道,让笔记本电脑与localhost通信以获得它的SQLServer连接,即:

ssh -L 1433:localhost:1433 user@windows_server_name