2011-09-08 3 views
15

와우 나는 며칠 동안이 하나에 갇혀있었습니다. Heroku의 database.yml에 연결하는 데 문제가 있습니다. 나는 시더와 루비 1.9.2에 있습니다. 내 dev 및 테스트 dbs는 sqlite3이고 prod db는 Cedar 규칙을 처리하기위한 postgreSQL입니다.Heroku에서 데이터베이스 연결

Rails.env.production? ? (env = "production") : (env = "development") 
dbconfig = YAML::load(File.open('config/database.yml'))[env] 
ActiveRecord::Base.establish_connection(dbconfig) 

모든 지역에서 잘 간다하지만 Heroku가에 누르면, 내가 얻을 : Heroku가 내 데이터베이스를 좋아하지 않는 것 같습니다

ArgumentError: syntax error on line 17, col 0: `adapter = uri.scheme' 
from /usr/local/lib/ruby/1.9.1/syck.rb:135:in `load' 

여기 내 루비 스크립트 코드입니다. yml. 여기에 대한 개요는 다음과 같습니다 첫째

development: 
    adapter: sqlite3 
    database: db/development.sqlite3 
    pool: 5 
    timeout: 5000 

test: 
    adapter: sqlite3 
    database: db/test.sqlite3 
    pool: 5 
    timeout: 5000 

production: 
    adapter: postgresql 
    encoding: unicode 
    database: foo 
    port: 5432 
    host: foobar.amazonaws.com 
    username: foo 
    password: bar 
+0

데이터베이스에 연결 한 적이 있습니까? 대답은 실제로 연결에 대한 완전한 해결책을 포함하지 않는 것 같습니다. – baash05

답변

27

을, Heroku가 는 자신의 Heroku가 특정 버전 당신의 config/database.yml을 덮어 씁니다. 이것이 Heroku가 자동으로 애플리케이션을 자체 postgresql 데이터베이스에 연결하는 방법입니다. 자신의 posgresql 데이터베이스에 대해 Heroku에게 알리려면 올바른를 설정해야하며 은 Heroku가 무시하므로 저장소의 config/database.yml에서 생산 데이터베이스를 생략 할 수 있습니다.

두 번째로 config/database.yml 파일은 YAML 파일의ERB 템플릿입니다. 은 먼저 YAML을 통해 출력을 실행하기 전에 평가 루비 (ERB)를 통해 파일 내용을 실행해야합니다.

+0

OK 그래서 Heroku에서 DB를 공유하고 싶다면 위의 세 줄을 지우고 Heroku가 DB를 관리하게하십시오. 감사합니다. – PEF

+0

수정하십시오. Heroku postgres addon (Heroku를 통해 공유 및 전용 데이터베이스)을 사용하려면 아무 것도하지 않습니다. Amazon RDS 애드온을 사용하려면 아무 작업도 수행하지 마십시오. 두 애드온 모두 응용 프로그램의'DATABASE_URL' 설정 변수를 설정합니다.이 변수는 Heroku의'config/database.yml'가 분석합니다. 자신의 데이터베이스 서버를 사용하고 싶다면 응용 프로그램의'DATABASE_URL' 설정 변수가 자신의 데이터베이스 서버를 가리 키도록 설정해야하며'config/database.yml'을 만지지 않아야합니다. – yfeldblum

+8

heroku가 config/database.yml에 넣는 것을보고 싶다면 "heroku run bash"와 "cat config/database.yml"을 실행하십시오;) –