2010-12-20 4 views
1

그것이 루비 레일에 응용 프로그램을 가지고하는 것이 가능한가 :의 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 database-support SLASH ms-sql"의 DSN-less 연결 지침이 제대로 작동하지 않았으므로이 연결에는 몇 가지 추가 구성이 필요합니다.

'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'에이 위치하고있다, 없다 '/ 등'에서이 -이 운동하기 쉬운) .

EY Unix 패키지 기능을 사용하여 'unixODBC'및 'freetds'패키지를 설치하고 모든 구성을 SSH를 통해 수동으로 수행했습니다. Sudo는 EY에서 사용할 수 있습니다 (암호 필요 없음). 그 구성을 자동화하는 셰프 레셉 (Chef Recepes) 기능도 있습니다 (꽤 쉽게 할 수있는 것 같습니다, 나는 내일 시도 할 것입니다).

희망이 있으면 도움이됩니다.

+0

은 고통 스럽습니다. 나는 원격 mongodb로 시도했다. 그것은 작동하지 않았다. 그러나 이론적으로는 효과가있다. – zengr

답변

0

SQL Server 데이터베이스의 이전 데이터를 새 응용 프로그램으로 가져와야하는 것과 비슷한 문제가 있습니다. 데이터는 직접 테이블 가져 오기가 아니지만 일부 처리 및 변환을 거쳐야합니다. 우리는 이전 데이터 변환 문제로 새로운 응용 프로그램을 오염시키지 않도록 개인용 보석에 사는 가져 오기 레이어를 만들었습니다. 이 접근 방식은 점진적 업데이트를 허용하도록 설계되었으므로 출시가 가까워 질수록 전환 시점까지 레코드를 동기화 할 것입니다.

Heroku는 특히 FreeTDS를 지원하지 않기 때문에 SQLServer에 연결하는 것이 쉽지 않다고 말했습니다. 지원 직원은 사무실의 랩톱에서 가져온 보석을 사용하여 인스턴스를 실행하고 데이터베이스에 연결하도록 구성하는 것이 좋습니다 (무료 공유가 아닌 전용 DB가 필요함). 이것은 우리에게 가장 맛있는 접근 방식처럼 들렸다.

둘째, @ Justice가 언급 한 보안과 관련하여 호스팅 회사와 함께 SQLServer 용 SSL을 구성하는 방법에 대해 논의했으며이 문제의 복잡성을 지적했습니다. 그들은 VPN을보다 쉬운 솔루션으로 추천했습니다. 사무실 측 VPN 하드웨어가 없기 때문에 가장 단순하고 무료 인 솔루션은 SSH 터널으로 입증되었습니다.

랩톱에서 SQLServer Windows 상자로 SSH 터널을 설정했습니다. 그것은 간단했다. 우리는 CopSSH는 (그런데, 리눅스 쉘과 함께 제공) 윈도우에 설치 우리는 즉, 그 SQLServer에 연결에 localhost로 노트북 이야기 갖는, 단순히 터널을 설정 할 수 있었다했다 :

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

4

가능합니다.

Heroku가 복사가/당신의 저장소가 제공 한 이상 자신의 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을 사용하도록합니다 정확히 일치하거나 와일드 카드와 일치하는 인증서의 이름 중 하나.

+0

감사합니다 저스티스! 이제 database.yml을 사용하는 대신 DB 연결을 동적으로 설정하고 SSL 옵션을 조사해야 할 필요가 있습니다. 여기에 결과를 게시합니다. –

0

나는 Heroku가 FreeTDS를 가지고 있다는 것을 모르고 있었습니까? 나는 그들이 말하지 않았다. FreeTDS 0.91과 함께 사용되는 TinyTDS는 freetds.conf 의존성을 0으로 가질 수 있으며 런타임 연결 인수로 운전할 수 있습니다. 우리는 0.91을 OpenSSL과 정적으로 연결하는 Ubuntu 10.4 네이티브 젬을 만들려고합니다. 그래서 Heroku에 넣고 Azure에 연결하거나 외부 DB를 소유 할 수 있습니다.

+0

그래, 내가이 문제를 조사 할 때 TinyTDS 젬을 들여다 보았는데이 젬이 아주 좋은 아이디어라고 생각했지만 새로운 것이었고 나는 그것을 설정할 수 없었다. (모든 의존성을 어떻게 구성 할지를 몰랐다.). 같은 문제를 다시 해결해야한다면 TinyTDS를 시도 할 것입니다! –

+0

그리고 네, FreeTDS를 설치했다면 Heroku의 지원을 요청했을 때 응답했습니다. 하지만 나는이 분야에서 당신만큼 전문적이지는 않습니다. 그래서 두 번 확인하는 것이 좋습니다. –