2011-11-17 42 views
30

Khi tôi cố gắng chạy:Chạy rake db: thả db: tạo db: di chuyển trên Heroku Cedar chồng

heroku run rake db:drop db:create db:migrate 

tôi nhận được lỗi:

Running rake db:drop attached to terminal... up, run.5 
Couldn't drop adsfsadfas : #<ActiveRecord::StatementInvalid: PGError: ERROR: must be owner of database adsfsadfas 
: DROP DATABASE IF EXISTS "adsfsadfas"> 

tôi trên stack Heroku Cedar . Tôi có được phép thả cơ sở dữ liệu trên Heroku không?

Cảm ơn!

John lệnh

+0

Dưới đây là một cập nhật câu trả lời: http://stackoverflow.com/a/13347768/1417223 –

Trả lời

43

The rake db:reset task is not supported. Heroku apps do not have permission to drop and create databases. Use the heroku pg:reset command instead.

+4

yeah, bạn cần phải gõ 'Heroku pg: reset SHARED_DATABASE' sau đó nhập tên ứng dụng của bạn tại dấu nhắc khi hỏi – stephenmurdoch

+16

này bây giờ đã thay đổi cho 'Heroku pg: reset DATABASE_URL --confirm nameofapp' - YMMV – stephenmurdoch

+0

cũng lưu ý với (nay là phản đối) Heroku đá quý,' Heroku pg: reset DATABASE_URL' cũng sẽ xóa giản đồ của bạn, mặc dù 'Heroku giúp đỡ pg 'tài liệu chỉ rõ" Xóa tất cả dữ liệu trong cơ sở dữ liệu ". Mặc dù, trong trường hợp của OP đó là những gì được mong muốn ('rake db: drop'). –

9

Trực tiếp phá hoại (thảtạo) không được phép trên Heroku. Nhưng nếu bạn đồng ý với việc mất tất cả dữ liệu, bạn có thể đặt lại cơ sở dữ liệu với pg:reset.

heroku pg:reset DATABASE_URL 

Mọi thay đổi khác phải được thực hiện với db:migrate. Điều này đảm bảo tính nhất quán của trạng thái cơ sở dữ liệu.


Nếu di chuyển của bạn không chạy qua ngăn xếp đầy đủ, bạn có thể sử dụng db:schema:load. Thao tác này tải giản đồ trực tiếp từ schema.rb. Nhưng lưu ý rằng điều này cũng có thể phá hoại nếu create_table sử dụng các thông số force: true hoặc force: :cascade.

heroku run rake db:schema:load 
Các vấn đề liên quan