2012-09-11 44 views
5

Khi ứng dụng của tôi được xây dựng trên Heroku nó nóiHeroku 'Viết cấu hình/database.yml để đọc từ DATABASE_URL' có nghĩa là gì?

Writing config/database.yml to read from DATABASE_URL 

Điều đó có nghĩa gì? Đây có phải là mới đến ngăn xếp Cedar?

Tôi có ứng dụng Rack. My config.ru sử dụng để làm việc trên Barmy tre ngăn xếp:

#!/usr/bin/ruby 
environment = ENV['DATABASE_URL'] ? 'production' : 'development' 

require './pb.rb' 

dbconfig = YAML.load(File.read('config/database.yml')) 
Pb::Models::Base.establish_connection dbconfig[environment] 
Pb.create if Pb.respond_to? :create 

run Pb 

Trên máy tính của riêng tôi nó sẽ đọc địa phương của tôi config/database.yml (mà không phải cam kết để kiểm soát nguồn)

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

Và trên Heroku nó sẽ đọc Heroku's database.yml. Kiểm tra nó bây giờ trên Cedar heroku run cat config/database.yml, nó dường như là một tập tin Ruby, và không phải yml. Sự thay đổi này có được giải thích ở mọi nơi không?

Trả lời

8

Khi bạn đẩy ứng dụng của mình vào Heroku, nếu bạn có thư mục config, Ruby build pack writes a new database.yml file và tạo thông báo bạn thấy khi thực hiện.

Rails runs this file through ERB when loading it, để cho phép các tùy chọn động khác nhau. Heroku tận dụng điều này, tạo ra một tệp ERB đọc biến môi trường DATABASE_URL và tạo ra tệp .yml chấp thuận trỏ đến cơ sở dữ liệu đó.

Tôi giả định rằng trong trường hợp của Bamboo database.yml đã được tạo là một tệp Yaml đơn giản trỏ đến cơ sở dữ liệu của bạn (tôi không thể tìm thấy bất kỳ tham chiếu nào).

Để ứng dụng của bạn hoạt động trên Cedar, bạn cần chạy tệp thông qua ERB theo cùng cách với Rails. Thay đổi này:

dbconfig = YAML.load(File.read('config/database.yml')) 

để

require 'erb' 
dbconfig = YAML.load(ERB.new(File.read('config/database.yml')).result) 

Nếu địa phương database.yml chỉ là đồng bằng YAML, chạy qua ERB như thế này phải là một không-op, và nó sẽ lấy các giá trị ngay trên Heroku của bạn.

+0

Cảm ơn Matt, đây chính là vấn đề. –

+0

Đã viết cho Heroku, yêu cầu họ cập nhật tài liệu. Họ đã làm, cảm ơn Heroku! https://devcenter.heroku.com/articles/cedar-migration#postgres –