2011-03-22 26 views
32

Tôi có thể sử dụng cơ sở dữ liệu mysql từ máy chủ web cá nhân của tôi thay vì cơ sở dữ liệu của heroku không?Cơ sở dữ liệu mysql từ xa trên ứng dụng Heroku

tôi cấu hình cơ sở dữ liệu sản xuất của tôi như thế này:

production: 
    adapter: mysql2 
    database: somedatabase 
    username: someusername 
    password: somepassword 
    host: 1.1.1.1:1234 

Nhưng, điều này không làm việc, ứng dụng của tôi vẫn sử dụng Heroku được chia sẻ cơ sở dữ liệu.

Trả lời

47

Đây là cũ nhưng trong trường hợp bất cứ ai giọt quanh tìm kiếm một câu trả lời, nó dễ dàng hơn nhiều so với việc sử dụng đá quý. Chỉ cần cung cấp số DATABASE_URLSHARED_DATABASE_URL (không chắc chắn nếu số thứ hai là cần thiết). Các định dạng cơ sở dữ liệu url là adapter://username:[email protected]:port/database, ví dụ như vậy, bạn sẽ làm gì:

heroku config:add DATABASE_URL=mysql://etok:[email protected]<your-server>:3306/etok 
heroku config:add SHARED_DATABASE_URL=mysql://etok:[email protected]:3306/etok 

Sau đó tái triển khai ứng dụng của bạn. Nó sẽ đọc DATABASE_URL của bạn và tạo cơ sở dữ liệu.yml từ đó. Cổng mặc định đã là 3306, vì vậy nó không cần thiết trong url trong trường hợp của bạn. Khi bạn triển khai, bạn có thể nhận thấy rằng nó tạo ra database.yml của bạn:.

-----> Writing config/database.yml to read from DATABASE_URL 

Sau đó, bạn đang thiết lập (miễn là máy chủ của bạn chấp nhận kết nối từ máy chủ của bạn Heroku

+9

Có vẻ như 'DATABASE_URL' là đủ, nó hoạt động mà không chỉ định 'SHARED_DATABASE_URL'. Ngoài ra, tôi muốn nhận thấy rằng bộ điều hợp 'mysql2' bây giờ phổ biến hơn' mysql'. Vì vậy, nó sẽ trông giống như 'mysql2: // ...'. Tất nhiên bạn phải thêm 'gem 'mysql2'' vào' Gemfile' của bạn. –

+0

Có thể sử dụng X.509 theo cách này không? –

+2

"Trong trường hợp" bất cứ ai "rơi xung quanh tìm kiếm câu trả lời". Bạn vừa mới cứu ngày của tôi. Cảm ơn bạn! Điều này đơn giản hơn nhiều so với tôi nghĩ. – RileyE

1

hãy xem Heroku Amazon RDS addon. Tôi không nói sử dụng nó, nhưng nó cung cấp cho bạn một cái nhìn sâu sắc về những gì bạn cần làm và cách Heroku quản lý cơ sở dữ liệu - về cơ bản bạn cần phải thiết lập một biến cấu hình cho cá thể mysql của bạn.

1

Heroku bỏ qua database.yml của bạn. Bạn sẽ cần phải khám phá các giải pháp Amazon RDS John Beynon đề nghị hoặc một số addon tương tự khác (nếu có). IMO, bạn sẽ phải đánh giá lại nhu cầu của bạn để sử dụng MySQL db của bạn hoặc tìm một số lưu trữ khác. Chỉ trong trường hợp bạn không đã biết điều đó, lệnh:

heroku db:push 

sẽ lặp lại cả sơ đồ và dữ liệu của cơ sở dữ liệu phát triển MySQL của bạn trong cơ sở dữ liệu Postgres Heroku của. Vì vậy, gắn bó với MySQL cho dev là không có vấn đề.

Tôi hy vọng điều đó sẽ hữu ích.

+0

Tôi đã tìm ra rằng bỏ qua cơ sở dữ liệu của mình.yml và tôi đã cố định cấu hình DATABASE_URL bằng cách này: config: thêm DATABASE_URL = mysql2: // user: mật khẩu @ host/dbname nhưng không hoạt động, ứng dụng đang tìm kiếm db trên máy chủ Amazon. Đây là từ nhật ký: /app/.bundle/gems/ruby/1.8/gems/mysql2-0.2.6/lib/mysql2/client.rb:37:in 'connect ': Truy cập bị từ chối cho người dùng' etok '@' ec2 -174-129-89-188.compute-1.amazonaws.com '(sử dụng mật khẩu: CÓ) (Mysql2 :: Lỗi) – dormitkon

8

Tôi đã viết một viên ngọc có thể trợ giúp việc này. Bạn có thể tìm thấy nó tại địa chỉ:

http://github.com/nbudin/heroku_external_db

+0

Cảm ơn Nat. Tôi đã được sử dụng bằng cách sử dụng đá quý của bạn trong một tháng và nó hoạt động tốt! – Dorian

+1

Chúng tôi cũng đã sử dụng nó trong khoảng một năm. Tôi đã thêm một số tài liệu vào dự án đó để dễ dàng bắt đầu hơn. Đây là một liên kết để viết lên blog của tôi: http://www.benjaminoakes.com/2011/11/21/using-heroku-with-an-external-mysql-database/ –

3
heroku config:add DATABASE_URL=mysql://dbusername:[email protected]:3306/databasename 
heroku config:add SHARED_DATABASE_URL=mysql://dbusername:[email protected]:3306/databasename 

Sau đó, làm một

Heroku restart 

rằng nên làm

Lưu ý quan trọng:. tôi đề nghị bạn sử dụng cơ sở dữ liệu máy chủ địa chỉ IP so với việc sử dụng tên máy chủ trực tiếp, coz, với một số dịch vụ lưu trữ được chia sẻ như godaddy, tên máy chủ db trông giống như user.345432.abcd.godaddy.com và có vẻ như heroku không thể giải quyết đúng cách (trải nghiệm cá nhân) , Tôi đã giải quyết tên máy chủ thành địa chỉ IP và sử dụng IP trực tiếp hoạt động như một sự quyến rũ! Ngoài ra, nếu mật khẩu cơ sở dữ liệu của bạn có các ký tự đặc biệt, hãy đảm bảo bạn thoát chúng đúng cách (như '\!' Cho '!' Và cứ thế ..)

Các vấn đề liên quan