Tôi muốn truy cập cơ sở dữ liệu của một ứng dụng từ một ứng dụng Heroku khác. Điều đó có khả thi trong cơ sở dữ liệu được chia sẻ không?
Câu trả lời:
ĐÃ CẬP NHẬT
Ban đầu, câu trả lời này nói rằng mặc dù điều này có thể thực hiện được với một vài thủ thuật, nhưng nó rất không được khuyến khích. Điều này dựa trên lời khuyên trên trang web hỗ trợ nhà phát triển Heroku. Tuy nhiên, gần đây Heroku đã đưa ra một thông báo mô tả cụ thể cách đạt được điều này và đã đưa ra lời khuyên của họ trên trang web của nhà phát triển. Nội dung hoàn chỉnh của phần này trong e-mail của họ được bao gồm bên dưới:
Bạn có biết rằng các ứng dụng Heroku có thể chia sẻ một cơ sở dữ liệu chung? Ví dụ: bạn có thể đặt các chức năng phân tích trong một ứng dụng riêng biệt từ mã giao diện người dùng của bạn.
Chỉ cần đặt var cấu hình DATABASE_URL cho một số ứng dụng thành cùng một giá trị. Trước tiên, hãy tải DATABASE_URL cho ứng dụng hiện có của bạn:
$ heroku config | grep DATABASE_URL --app sushi DATABASE_URL => postgres://lswlmfdsfos:5FSLVUSLLT123@ec2-123-456-78-90.compute1.amazonaws.com/ldfoiusfsf
Sau đó, đặt DATABASE_URL cho các ứng dụng mới thành giá trị này:
$ heroku config:add DATABASE_URL=postgres://lswlmfdsfos:5FSLVUSLLT123@ec2-123-456-78-90.compute-1.amazonaws.com/ldfoiusfsf --app sushi-analytics Adding config vars: DATABASE_URL => postgres://lswlm...m/ldfoiusfsf Restarting app... done, v74. That's it
- bây giờ cả hai ứng dụng sẽ chia sẻ một cơ sở dữ liệu.
Chỉ là một điểm tham khảo, lời khuyên ban đầu của Heroku là tạo và sử dụng một API để truy cập dữ liệu từ xa. Quan điểm cá nhân của tôi là về tổng thể, đối với nhiều trường hợp, đây là lời khuyên tốt , (nghĩa là tốt hơn là chỉ kết nối nhiều ứng dụng với cùng một DB) mặc dù tôi có thể thấy những tình huống mà điều đó sẽ rắc rối hơn đáng giá.
CẬP NHẬT
Theo nhận xét về câu trả lời này, cần lưu ý rằng Heroku bảo lưu quyền thay đổi URL cơ sở dữ liệu theo yêu cầu. Nếu điều này xảy ra, nó sẽ khiến các kết nối phụ của bạn không thành công và bạn sẽ cần cập nhật các URL cho phù hợp.
Câu trả lời muộn màng cho câu hỏi thích hợp!
Heroku chính thức hỗ trợ một giải pháp tốt hơn / duyên dáng hơn bằng khung công tác bổ trợ của họ ngay bây giờ. Nó được mô tả trong bản tin mới nhất của họ về cách chia sẻ addon giữa các ứng dụng. Dưới đây là các đoạn trích được đề cập trong bài viết:
$ heroku addons:attach my-sushi-db -a my-sushi-reporting --as MAIN_SUSHI_DB
Adding MAIN_SUSHI_DB to my-sushi-reporting... done
Setting MAIN_SUSHI_DB vars and restarting my-sushi-app-reporting... done, v3
Liên kết: expand_the_power_of_add_ons
heroku addons:attach originating_app_name::HEROKU_POSTGRESQL_COLOR_URL -a no_db_app_name
Theo như tôi biết là có thể - bạn sẽ phải xem xét các biến cấu hình heroku cho ứng dụng của mình bằng DB và sau đó đặt database_url trên ứng dụng muốn chia sẻ cơ sở dữ liệu thành cùng một giá trị. Tuy nhiên, Kinda đi chệch hướng và nó được hỗ trợ như thế nào thì tôi không biết.
CHỈNH SỬA Chỉ để cho tâm trí của tôi được nghỉ ngơi, tôi đã tạo ra hai ứng dụng trên Heroku - một 'bài đăng' đơn giản với tiêu đề.
http://evening-spring-734.heroku.com/posts là bậc thầy
http:// Electro-galaxy-230.heroku.com/posts - là nô lệ
Vì vậy, các bài đăng được tạo trên một trong hai sẽ được ghi vào URL cơ sở dữ liệu của Evening-spring-734.
Tất cả những gì tôi đã làm là sử dụng cấu hình heroku để lấy DATABASE_URL của Evening-spring-734 và sau đó đặt cùng một giá trị vào DATABASE_URL của electric-galaxy-230.
Bạn có thể kết thúc với một số điều kiện cuộc đua DB trái cây nhưng chắc chắn là có thể làm được.
Phép thuật hả?
Tôi đã nhận được điều này trong bản tin Heroku gần đây. Tôi đang gửi email cho họ để tìm hiểu xem đó có thực sự là cách sử dụng được chấp thuận hay không.
BẠN CÓ BIẾT KHÔNG?
Chia sẻ một cơ sở dữ liệu với nhiều ứng dụng
Bạn có biết rằng các ứng dụng Heroku có thể chia sẻ một cơ sở dữ liệu chung không? Ví dụ: bạn có thể đặt các chức năng phân tích trong một ứng dụng riêng biệt từ mã giao diện người dùng của bạn.
Chỉ cần đặt
DATABASE_URL
var cấu hình cho một số ứng dụng thành cùng một giá trị. Đầu tiên, hãy tảiDATABASE_URL
ứng dụng hiện có của bạn:$ heroku config | grep DATABASE_URL --app sushi DATABASE_URL => postgres://lswlmfdsfos:5FSLVUSLLT123@ec2-123-456-78-90.compute-1.amazonaws.com/ldfoiusfsf
Sau đó, đặt
DATABASE_URL
cho các ứng dụng mới thành giá trị này:$ heroku config:add DATABASE_URL=postgres://lswlmfdsfos:5FSLVUSLLT123@ec2-123-456-78-90.compute-1.amazonaws.com/ldfoiusfsf --app sushi-analytics Adding config vars: DATABASE_URL => postgres://lswlm...m/ldfoiusfsf Restarting app... done, v74.
Vậy là xong - bây giờ cả hai ứng dụng sẽ chia sẻ một cơ sở dữ liệu.
Plugin Amazon RDS hoạt động tốt cho việc này. Nhiều ứng dụng có thể chia sẻ cùng một phiên bản RDS.
Bạn có thể linh hoạt để họ chia sẻ bảng hoặc tránh xung đột tên bảng bằng cách sử dụng active_record.table_name_prefix.
Xem tài liệu tham khảo về Heroku: https://devcenter.heroku.com/categories/heroku-postgres
Hỏi: Nhiều ứng dụng Heroku có thể kết nối với một cơ sở dữ liệu không?
Đúng. Bạn có thể định cấu hình nhiều ứng dụng chạy trên Heroku để kết nối với một cơ sở dữ liệu duy nhất, miễn là bạn có thông tin đăng nhập cơ sở dữ liệu. Chỉ cần ghi đè DATABASE_URL của các ứng dụng bạn muốn kết nối bằng cách sử dụng lệnh heroku config: add DATABASE_URL = ....