1

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

a) 部署在 Heroku 上,并且

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

我认为我需要在 Heroku 上安装 unixODBC,但我找不到这样做的方法。这可能吗?或者,有没有其他方法(没有 ODBC?)来完成这个?

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


更新: 有关该主题的一些信息:

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

2) 此外,可以通过 Heroku 控制台在反引号中运行 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 问题页面中有一个 open ticket#2)。“wiki.rubyonrails.org SLASH database-support SLASH ms-sql”中的 DSN-less 连接说明对我不起作用,我想这个连接也需要一些额外的配置。

没有 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 软件包功能安装了“unixODBC”和“freetds”软件包,并通过 SSH 手动进行了所有配置。Sudo 在 EY 中可用(无需密码)。还有 Chef Recepes 功能可以自动化这些配置(看起来很简单,我明天要试试)。

希望这会有所帮助。

4

4 回答 4

4

有可能的。

因为 Heroku 复制/符号链接自己config/database.yml在存储库中提供的任何内容,所以您可能需要采取额外的步骤(例如 inconfig/environments/production.rb或 in config/initializers/remote_mssql_from_heroku.rb)来适当地设置您的应用程序。

但是,您将面临挑战,从 Heroku 到您的 MSSQL 数据库的流量将穿越公共互联网。默认情况下,此流量不会被加密。世界上的每个人都可能会监控您的 Heroku 应用程序和数据库之间的流量,甚至可以更改正在进行的流量,无论是出于良性还是恶意目的,而您却无法检测到它。MS SQL 提供了通过 SSL 连接的能力。此功能需要在 MSSQL 服务器中进行显式配置,因此您必须能够访问和修改该配置。此外,此配置要求您的客户端库是最新的并且能够通过 SSL 与 MSSQL 通信。

于 2010-12-20T22:41:19.627 回答
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#

于 2012-09-30T23:49:32.213 回答
0

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

于 2011-09-13T14:37:38.223 回答
0

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

Heroku 告诉我们,连接到 SQLServer 并非易事,特别是因为它们不支持 FreeTDS。他们的支持人员建议在我们办公室的笔记本电脑上使用 import 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

于 2011-10-29T00:40:24.380 回答