Saya ingin mengakses database aplikasi dari aplikasi Heroku lain. Apakah itu mungkin dalam database bersama?
Jawaban:
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:5FSLVUSLLT123@ec2-123-456-78-90.compute1.amazonaws.com/ldfoiusfsf
Kemudian, setel DATABASE_URL untuk aplikasi baru ke nilai ini:
$ 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
- 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.
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
heroku addons:attach originating_app_name::HEROKU_POSTGRESQL_COLOR_URL -a no_db_app_name
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?
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, dapatkanDATABASE_URL
untuk aplikasi Anda yang sudah ada:
$ heroku config | grep DATABASE_URL --app sushi DATABASE_URL => postgres://lswlmfdsfos:5FSLVUSLLT123@ec2-123-456-78-90.compute-1.amazonaws.com/ldfoiusfsf
Kemudian, setel
DATABASE_URL
untuk aplikasi baru ke nilai ini:
$ 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.
Itu saja - sekarang kedua aplikasi akan berbagi satu database.
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.
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 = ....