2010-12-20 14 views
1

それはルビーon Railsのアプリケーションを、持ってすることが可能である:RoRのアプリHerokuの上に展開し、SQL Serverデータベースで作業

a)は、リモートSQLでの作業)Herokuの上に展開し、

Bサーバーデータベース?

私は、HerokuにunixODBCがインストールされている必要がありますが、私はそうする方法を見つけることができません。これは可能ですか? または、これを達成するための他の方法(ODBCなし?)はありますか?

ご指摘やご指摘ありがとうございます。


更新: をテーマに関するいくつかの情報:あなたはすでにそれを持っているので、

1)Herokuのは、デフォルトではunixODBCのとFreeTDSの両方を事前にインストールします。

2)また、例えば、バッククォートでHerokuのコンソール経由でシェルコマンドを実行することが可能である:Herokuのシェルのコマンド "ODBCINST"

heroku console 
    `odbcinst` 

(実行して結果を)示し

3)パッケージがインストールされているスライス外のファイルシステムにアクセスすることはできません。ドライバーパスのみが必要な場合は、Herokuのサポートで提供することができます(私の場合は/usr/lib/odbc/libtdsodbc.so)。

4)Herokuシェルでsudoコマンドを実行することはできません。

現在、MS SQL Serverに接続するには、少なくとも「freetds.conf」ファイルを追加する必要があります。 tinyTDSを使用している場合でも(tinyTDS gitgub発行ページにオープンチケット#2があります)。 「wiki.rubyonrails.org SLASHデータベースサポートSLASH ms-sql」のDSNレス接続の指示がうまくいかなかったので、この接続には余分な設定が必要です。

「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」に位置しています - これはアウト働きやすいです) 。

EY Unix Packages機能を使用して 'unixODBC'と 'freetds'パッケージをインストールし、すべての設定をSSH経由で手動で行いました。 SudoはEYで利用可能です(パスワード不要)。これらの設定を自動化するシェフレセプス機能もあります(かなり簡単ですが、明日に試してみるつもりです)。

希望すると便利です。

+0

苦痛になります。私は遠隔のmongodbを使ってみました。それは仕事をしなかった。しかし理論的にはうまくいくはずです。 – zengr

答えて

0

SQL Serverデータベースから古いデータを新しいアプリケーションにインポートする必要があるのと同様の問題が発生しています。データはストレートテーブルのインポートではありませんが、処理と変換が必要です。私たちは古いデータ変換の問題で新しいアプリケーションを汚染しないように、プライベートな宝石の中に住むこのためのインポートレイヤーを構築しました。このアプローチは、更新が可能になるようにも設計されています。開始に近づくにつれて、切り替えの瞬間までにレコードを同期させていきます。

Herokuは、特にFreeTDSをサポートしていないため、SQLServerに接続することは自明ではないと言いました。彼らのサポートスタッフは、私たちのオフィスのラップトップからインポート宝石を使ってインスタンスを実行し、データベースに接続するように構成することを推奨しました(無料の共有データベースではなく専用DBが必要です)。これは私たちにとって最も美味しいアプローチのように聞こえました。

第2に、@ Justiceによって言及されたセキュリティに関して、私たちはホスティング会社とSQLServer用のSSLを構成することについて議論し、彼らはこれの複雑さを指摘しました。彼らは簡単なソリューションとしてVPNを推奨しました。我々はオフィス側のVPNハードウェアを持っていないので、最も単純で無料のソリューションはSSHトンネルであることが判明しました。

ラップトップからSQLServer WindowsボックスにSSHトンネルをセットアップしました。それは簡単でした。つまり、私たちはCopSSHが(ちなみにLinuxのシェルが付属し、)は、Windowsにインストールされていたと我々は単にそのSQLServerの接続にlocalhostにノートパソコンの話を持つ、トンネルを設定することができました:

ssh -L 1433:localhost:1433 [email protected]_server_name

4

可能です。

あなたがリポジトリに用意しているもの以上に、config/database.ymlをコピー/シンボリックリンクするため、アプリケーションを適切にセットアップするために追加の手順(例:config/environments/production.rbまたはconfig/initializers/remote_mssql_from_heroku.rb)が必要な場合があります。

しかし、HerokuからMSSQLデータベースへのトラフィックは、一般のインターネットを通過するという難題に直面します。デフォルトでは、このトラフィックは暗号化されません。潜在的に世界中の誰もがHerokuアプリケーションとデータベースの間のトラフィックを監視し、悪意のある目的か悪意のある目的かにかかわらず、検出できなくても機内のトラフィックを変更することができます。 MS SQLは、SSL経由で接続する機能を提供します。この機能には、MSSQLサーバーで明示的な構成が必要なため、その構成にアクセスして変更できる必要があります。さらに、この設定では、クライアントライブラリが最新であり、SSL経由でMSSQLと通信できることが必要です。 MSSQLサーバーは、サーバのFQDN(少なくともサーバが知っているFQDN)と完全に一致するかワイルドカードで一致するか、クライアントがサーバに対してFQDNを使用することを、サーバ証明書リストにCommon NameまたはSubject Alternative Name証明書の名前の1つに完全に一致するかワイルドカードが一致する

+0

ありがとうジャスティス!今では、database.ymlを使用する代わりに、DB接続を動的にセットアップし、SSLオプションを調べる必要があることがわかります。ここに結果を公開します。 –

0

私はHerokuがFreeTDSを持っていることを知りませんでしたか?私は彼らに言わなかった。 FreeTDS 0.91でTinyTDSを使用すると、freetds.confの依存性がゼロになり、実行時接続引数によって駆動される可能性があります。私たちは、0.91をOpenSSLに静的にリンクするUbuntu 10.4ネイティブの宝石を構築しようとしています。あなたはそれをHerokuにドロップして、Azureに接続したり、外部のDBを所有したりすることができます。

+0

はい、私はこの問題を調査していたときにTinyTDSの宝石を調べましたが、この宝石はとても良いアイデアだと思っていましたが、それは新しく、セットアップできませんでした)。私が同じ問題をもう一度解決する必要があったなら、私はTinyTDSを試してみよう! –

+0

はい、私はHerokuのサポートにFreeTDSがインストールされているかどうか尋ねたところ、彼らは答えました。しかし、私はこの分野の専門家ではありません:)ので、二重チェックをしてください。 –

関連する問題