Bagikan database antara 2 aplikasi di Heroku

90

Saya ingin mengakses database aplikasi dari aplikasi Heroku lain. Apakah itu mungkin dalam database bersama?

donald
sumber

Jawaban:

100

DIPERBARUI

Awalnya, jawaban ini menyatakan bahwa meskipun ini mungkin dilakukan dengan beberapa trik, namun sangat tidak disarankan. Ini didasarkan pada saran di situs web dukungan pengembang Heroku. Namun, baru-baru ini Heroku mengeluarkan komunikasi yang secara khusus menjelaskan bagaimana mencapai ini, dan telah mempermudah saran mereka di situs pengembang. Teks lengkap dari bagian email mereka ini disertakan di bawah ini:

Tahukah Anda bahwa aplikasi Heroku dapat berbagi database yang sama? Misalnya, Anda dapat menempatkan fungsi analitik dalam aplikasi terpisah dari kode yang menghadap pengguna.

Cukup setel var konfigurasi DATABASE_URL untuk beberapa aplikasi ke nilai yang sama. Pertama, dapatkan DATABASE_URL untuk aplikasi Anda yang sudah ada:

$ heroku config | grep DATABASE_URL  --app sushi DATABASE_URL => postgres://lswlmfdsfos:[email protected]/ldfoiusfsf

Kemudian, setel DATABASE_URL untuk aplikasi baru ke nilai ini:

$ heroku config:add DATABASE_URL=postgres://lswlmfdsfos:[email protected]/ldfoiusfsf --app sushi-analytics
Adding config vars: DATABASE_URL => postgres://lswlm...m/ldfoiusfsf Restarting app... done, v74. That's it

- sekarang kedua aplikasi akan berbagi satu database.

Hanya sebagai titik referensi, saran asli Heroku adalah membuat dan menggunakan API untuk mengakses data dari jarak jauh. Pandangan pribadi saya adalah bahwa secara keseluruhan, untuk banyak situasi ini adalah nasihat yang baik , (yaitu lebih baik daripada hanya menghubungkan beberapa aplikasi ke DB yang sama) meskipun saya dapat melihat situasi di mana itu akan menjadi lebih banyak masalah daripada nilainya.

MEMPERBARUI

Sesuai komentar pada jawaban ini, perlu dicatat bahwa Heroku berhak mengubah URL basis data sesuai kebutuhan. Jika ini terjadi, ini akan menyebabkan koneksi sekunder Anda gagal, dan Anda harus memperbarui URL yang sesuai.

Paul Russell
sumber
1
cukup atur aplikasi di Heroku untuk membuktikannya - detail dalam tanggapan saya.
John Beynon
1
Cukup adil, suara bawah dicabut ... Dukungan Heroku memberikan jawaban yang berbeda! Pertanyaan: Jika saya mengembangkan dua aplikasi heroku, dapatkah mereka mengakses satu database? Alasan saya bertanya adalah kami memiliki aplikasi rel dan aplikasi sinatra, dan mereka perlu membagikan database postgres. Lebih suka tidak melakukannya dengan http! Jawaban dari dukungan heroku: Ya, jika perlu, Anda bisa. Setiap aplikasi Heroku mendapatkan database yang disediakan secara default, tetapi mungkin satu aplikasi menggunakan database aplikasi lain hanya dengan menyalin config var DATABASE_URL dari satu aplikasi ke aplikasi lain.
John Beynon
1
Saya mencabut suara bawah tetapi jawaban yang diterima masih salah hanya sebagai FYI.
John Beynon
1
mereka mengatakan bahwa mereka berhak untuk mengubah URL database aplikasi Anda jadi jika itu terjadi Anda perlu mengubah url database yang Anda gunakan secara manual.
John Beynon
7
sekarang ada cara heroku resmi untuk berbagi DATABASE_URL antar aplikasi. lihat jawabannya oleh @ c360ian di bawah ini .
mobeets
83

Jawaban telat untuk pertanyaan terkait!

Heroku secara resmi mendukung solusi yang lebih baik / anggun melalui kerangka addon mereka sekarang. Ini dijelaskan dalam buletin terbaru mereka tentang cara berbagi addon antar aplikasi. Di bawah ini adalah cuplikan yang disebutkan dalam artikel tersebut:

$ 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

Tautan: expand_the_power_of_add_ons

c360ian.dll
sumber
Terima kasih banyak !, ini harus menjadi jawaban yang diprioritaskan!
HLL
2
Ini adalah jawaban yang benar. Semua jawaban lain tidak berlaku lagi, dan kebanyakan dari mereka tetap duplikat.
jelder
4
Format perintah yang saya gunakan adalahheroku addons:attach originating_app_name::HEROKU_POSTGRESQL_COLOR_URL -a no_db_app_name
Marklar
15

Sejauh yang saya tahu itu mungkin - Anda harus melihat variabel config heroku untuk aplikasi Anda dengan DB dan kemudian mengatur database_url pada aplikasi yang ingin membagikan database ke nilai yang sama. Agak keluar jalur meskipun dan tentang seberapa mendukungnya, saya tidak tahu.

EDIT Hanya untuk menenangkan pikiran, saya telah memutar dua aplikasi di Heroku - 'pos' perancah sederhana dengan judul.

http://evening-spring-734.heroku.com/posts adalah masternya

http://electric-galaxy-230.heroku.com/posts - adalah budaknya

Jadi posting yang dibuat di salah satu dari keduanya akan ditulis ke URL database evening-spring-734.

Yang saya lakukan adalah menggunakan konfigurasi heroku untuk mendapatkan DATABASE_URL dari evening-spring-734 dan kemudian setel nilai yang sama ke dalam DATABASE_URL dari electric-galaxy-230.

Anda bisa berakhir dengan beberapa kondisi balapan DB buah tetapi itu pasti mungkin untuk dilakukan.

Ajaib ya?

John Beynon
sumber
+1: Saya melihat ini sangat berguna untuk melakukan URL pendek atau kosong .. seperti myapp.me/iwasrobbed (Aplikasi Heroku # 1) dialihkan ke myapp.com/users/1 (Aplikasi Heroku # 2) karena sekarang saya dapat menyimpan nama vanity di DB pengguna standar. Terima kasih John!
dirampok
1
heroku pg: promosikan DATABASE_URL --app your_app_name adalah cara yang didukung untuk menyetel variabel ini.
Neil Middleton
satu-satunya komentar saya adalah kondisi balapan .. Pekerja dan contoh web akan sama, seperti pekerja jarak jauh seperti pekerja besi atau penyelamat.
baash05
12

Saya menerima ini di buletin Heroku baru-baru ini. Saya mengirim email kepada mereka untuk mengetahui apakah itu benar-benar penggunaan yang disetujui.

TAHUKAH KAMU?

Berbagi satu database dengan banyak aplikasi

Tahukah Anda bahwa aplikasi Heroku dapat berbagi database yang sama? Misalnya, Anda dapat menempatkan fungsi analitik dalam aplikasi terpisah dari kode yang menghadap pengguna.

Cukup setel DATABASE_URL config var untuk beberapa aplikasi ke nilai yang sama. Pertama, dapatkan DATABASE_URLuntuk aplikasi Anda yang sudah ada:

$ heroku config | grep DATABASE_URL  --app sushi
DATABASE_URL   => postgres://lswlmfdsfos:[email protected]/ldfoiusfsf

Kemudian, setel DATABASE_URLuntuk aplikasi baru ke nilai ini:

$ heroku config:add DATABASE_URL=postgres://lswlmfdsfos:[email protected]/ldfoiusfsf --app sushi-analytics
Adding config vars: DATABASE_URL => postgres://lswlm...m/ldfoiusfsf
Restarting app... done, v74.

Itu saja - sekarang kedua aplikasi akan berbagi satu database.

JoshRivers
sumber
4
Saya bertanya kepada Heroku tentang penggunaan metode ini untuk mendapatkan dyno Web gratis dan dyno Pekerja gratis. Inilah tanggapan mereka. >> "Josh - kami tidak menyarankan melakukan ini, tetapi sebagai tambahan akan ada masalah dengan pekerja yang menganggur. Setelah menganggur, itu akan berhenti melakukan pekerjaan apa pun dan tanpa ada yang 'membangunkan' seperti permintaan web, itu akan menjadi tidak berguna sebagai pekerja. "<< Jadi sepertinya Anda dapat menggunakan banyak aplikasi pada DB yang sama, tetapi tidak terlalu berguna secara gratis.
JoshRivers
Saya menggunakannya untuk tujuan pengembangan, saya sudah memiliki ribuan baris di aplikasi langsung saya, dan tampilan baru sedang dikembangkan di aplikasi heroku lain yang lebih kecil, jadi bisa berbagi data itu keren, saya bisa mengembangkan dan melihat tampilan baru dengan data yang sama
Dvid Silva
7

Plugin Amazon RDS berfungsi dengan baik untuk ini. Beberapa aplikasi dapat berbagi contoh RDS yang sama.

Anda memiliki fleksibilitas untuk meminta mereka berbagi tabel atau menghindari benturan nama tabel menggunakan active_record.table_name_prefix.

Steve Wilhelm
sumber
1

Lihat referensi Heroku: https://devcenter.heroku.com/categories/heroku-postgres

T: Dapatkah beberapa Aplikasi Heroku Terhubung ke satu database?

Iya. Anda dapat mengonfigurasi beberapa aplikasi yang berjalan di Heroku untuk terhubung ke satu database, asalkan Anda memiliki kredensial database tersebut. Cukup timpa DATABASE_URL aplikasi yang ingin Anda sambungkan menggunakan perintah heroku config: add DATABASE_URL = ....

jmk
sumber