Heroku'da 2 uygulama arasında veri tabanı paylaşın


91

Bir uygulamanın veritabanına başka bir Heroku uygulamasından erişmek istiyorum. Paylaşılan veritabanında bu mümkün mü?

Yanıtlar:


100

GÜNCELLENMİŞ

Başlangıçta bu cevap, birkaç numara ile bunun mümkün olmasına rağmen kesinlikle cesaretinin kırıldığını belirtiyordu . Bu, Heroku geliştirici destek web sitesindeki tavsiyelere dayanıyordu. Bununla birlikte, yakın zamanda Heroku, özellikle bunun nasıl başarılacağını açıklayan bir iletişim yayınladı ve geliştirici sitesinde tavsiyelerini sulandırdı. E-postalarının bu bölümünün tam metni aşağıdadır:

Heroku uygulamalarının ortak bir veritabanını paylaşabileceğini biliyor muydunuz? Örneğin, analitik işlevlerini kullanıcıya yönelik kodunuzdan ayrı bir uygulamaya koyabilirsiniz.

Birkaç uygulama için DATABASE_URL yapılandırma değişkenini aynı değere ayarlamanız yeterlidir. Öncelikle, mevcut uygulamanız için DATABASE_URL'yi alın:

$ heroku config | grep DATABASE_URL  --app sushi DATABASE_URL => postgres://lswlmfdsfos:5FSLVUSLLT123@ec2-123-456-78-90.compute1.amazonaws.com/ldfoiusfsf

Ardından, yeni uygulamalar için DATABASE_URL değerini şu değere ayarlayın:

$ 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

- şimdi her iki uygulama da bir veritabanını paylaşacak.

Bir referans noktası olarak, Heroku'nun orijinal tavsiyesi, verilere uzaktan erişmek için bir API oluşturmak ve kullanmaktı. Benim kişisel görüşüm, genel olarak, birçok durum için bu iyi bir tavsiye (yani, birden fazla uygulamayı aynı DB'ye bağlamaktan daha iyidir), ancak bunun değerinden daha fazla sorun olacağı durumları da görebiliyorum.

GÜNCELLEME

Bu yanıttaki yorumlara göre, Heroku'nun veritabanı URL'lerini gerektiği gibi değiştirme hakkını saklı tuttuğunu belirtmek gerekir. Bu gerçekleşirse, ikincil bağlantılarınızın başarısız olmasına neden olur ve URL'leri buna göre güncellemeniz gerekir.


1
Bunun mümkün olduğunu kanıtlamak için uygulamaları Heroku'da kurmanız yeterli - cevabımdaki ayrıntılar.
John Beynon

1
Yeterince adil, olumsuz oy geri çekildi ... Heroku desteği farklı bir yanıt veriyor! Soru: İki heroku uygulaması geliştirirsem, tek bir veritabanına erişebilirler mi? Sormamın nedeni bir raylar uygulamamız ve bir sinatra uygulamamız olması ve bir postgres veritabanını paylaşmaları gerekiyor. Bunu http ile yapmayı tercih etmezdim! Heroku desteğinin cevabı: Evet, gerekirse yapabilirsin. Her Heroku uygulaması varsayılan olarak sağlanan bir veritabanı alır, ancak bir uygulamanın başka bir uygulamanın veritabanını yalnızca bir uygulamadan diğerine DATABASE_URL yapılandırma değişkenini kopyalayarak kullanması mümkündür.
John Beynon

1
Olumsuz oyu geri çektim ancak kabul edilen cevap, bir FYI olarak hala yanlış.
John Beynon

1
uygulama veritabanı URL'nizi değiştirme hakkını saklı tuttuklarını, bu durumda kullandığınız veritabanı URL'sini manuel olarak değiştirmeniz gerekeceğini söylüyorlar.
John Beynon

7
DATABASE_URL'yi uygulamalar arasında paylaşmanın artık resmi bir heroku yolu var. Aşağıdaki @ c360ian tarafından verilen cevaba bakınız .
mobeets

84

İlgili soruya geç cevap!

Heroku, artık eklenti çerçevesi sayesinde daha iyi / zarif bir çözümü resmi olarak destekliyor. Eklentilerin uygulamalar arasında nasıl paylaşılacağıyla ilgili en son haber bültenlerinde açıklanmıştır. Yazıda bahsedilen pasajlar aşağıdadır:

$ 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

Bağlantı: expanding_the_power_of_add_ons


Çok teşekkürler !, öncelikli cevap bu olmalı!
HLL

2
Bu doğru cevap. Diğer tüm yanıtlar kullanımdan kaldırıldı ve çoğu yine de yineleniyor.
jelder

5
Kullandığım komutun formatıheroku addons:attach originating_app_name::HEROKU_POSTGRESQL_COLOR_URL -a no_db_app_name
Marklar

15

Mümkün olduğunu bildiğim kadarıyla - DB ile uygulamanız için heroku yapılandırma değişkenlerine bakmanız ve ardından veritabanını aynı değere paylaşmak isteyen uygulamada database_url'yi ayarlamanız gerekir. Gerçi yoldan sapmış ve ne kadar desteklendiğini bilmiyorum.

DÜZENLE Sadece fikrimi rahatlatmak için Heroku'da iki uygulama geliştirdim - bir başlığı olan basit bir iskele 'gönderisi'.

http://evening-spring-734.heroku.com/posts usta

http://electric-galaxy-230.heroku.com/posts - köle

Bu nedenle, her ikisinde de oluşturulan gönderiler akşam-bahar-734 veritabanı URL'sine yazılacaktır.

Tüm yaptığım heroku yapılandırmasını akşam-bahar-734'ün DATABASE_URL'sini almak ve ardından aynı değeri elektrik galaksi-230'un DATABASE_URL'sine ayarlamaktı.

Bazı meyveli DB yarış koşullarına sahip olabilirsiniz, ancak kesinlikle yapmak mümkündür.

Büyü ha?


+1: Bunu kısa veya boş URL'ler yapmak için çok faydalı buluyorum .. myapp.me/iwasrobbed (Heroku Uygulaması # 1) myapp.com/users/1 (Heroku Uygulaması # 2) 'ye yönlendirmeler gibi artık depolayabiliyorum standart kullanıcı DB'sindeki özel isim. Teşekkürler John!
iwasrobbed

1
heroku pg: DATABASE_URL'yi tanıtın --app your_app_name bu değişkeni ayarlamanın desteklenen yoludur.
Neil Middleton

Benim tek yorumum yarış koşulları ile ilgili .. İşçiler ve web örneği, demir işçisi veya yeniden sıraya alma gibi uzaktaki işçilerle aynı olacaktır.
baash05

12

Bunu geçenlerde Heroku haber bülteninde aldım. Gerçekten onaylanmış bir kullanım olup olmadığını öğrenmek için onlara e-posta gönderiyorum.

BİLİYOR MUSUN?

Bir veritabanını birçok uygulamayla paylaşma

Heroku uygulamalarının ortak bir veritabanını paylaşabileceğini biliyor muydunuz? Örneğin, analitik işlevlerini kullanıcıya yönelik kodunuzdan ayrı bir uygulamaya koyabilirsiniz.

Birkaç uygulama için DATABASE_URL yapılandırma değişkenini aynı değere ayarlamanız yeterlidir . Önce, DATABASE_URLmevcut uygulamanız için alın:

$ heroku config | grep DATABASE_URL  --app sushi
DATABASE_URL   => postgres://lswlmfdsfos:5FSLVUSLLT123@ec2-123-456-78-90.compute-1.amazonaws.com/ldfoiusfsf

Ardından, DATABASE_URLyeni uygulamalar için şu değere ayarlayın:

$ 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.

İşte bu - şimdi her iki uygulama da bir veritabanını paylaşacak.


4
Heroku'ya hem ücretsiz bir Web dinamiği hem de ücretsiz bir İşçi dinamiği almak için bu yöntemi kullanmasını sordum. İşte yanıtları. >> "Josh - bunu yapmaktan vazgeçiriyoruz, ancak buna ek olarak çalışanın boşta kalmasıyla ilgili sorunlar da olacaktır. Çalışmadığında, herhangi bir işi yapmayı bırakacak ve onu bir web isteği gibi 'uyandıracak' hiçbir şey olmayacaktı. işçi olarak işe yaramaz. "<< Aynı DB üzerinde birden fazla uygulama kullanabileceğinize benziyor, ancak bu ücretsiz olarak pek kullanışlı değil.
JoshRivers

Bunu geliştirme amaçlı kullanıyorum, canlı uygulamamda zaten binlerce satır var ve yeni görünüm başka bir küçük heroku uygulamasında geliştiriliyor, bu nedenle verileri paylaşabilmek harika, yeni görünümler geliştirebilir ve görebilirim. aynı veriler
Dvid Silva

7

Amazon RDS eklentisi bunun için iyi çalışıyor. Birden çok uygulama aynı RDS örneğini paylaşabilir.

Active_record.table_name_prefix kullanarak tabloları paylaştırma veya tablo adı çakışmasını önleme esnekliğine sahipsiniz.


1

Heroku referansına bakın: https://devcenter.heroku.com/categories/heroku-postgres

S: Birden fazla Heroku Uygulaması tek bir veritabanına bağlanabilir mi?

Evet. Veritabanları kimlik bilgilerine sahip olmanız koşuluyla, Heroku'da çalışan birden çok uygulamayı tek bir veritabanına bağlanacak şekilde yapılandırabilirsiniz. Heroku yapılandırmasını kullanarak bağlanmak istediğiniz uygulamaların DATABASE_URL'sini geçersiz kılmanız yeterlidir: DATABASE_URL = ... komutunu ekleyin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.