Quero acessar o banco de dados de um aplicativo de outro aplicativo Heroku. Isso é possível no banco de dados compartilhado?
Respostas:
ATUALIZADA
Originalmente, essa resposta afirmava que, embora isso fosse possível com alguns truques, era fortemente desencorajado. Isso foi baseado no conselho do site de suporte ao desenvolvedor do Heroku. No entanto, recentemente o Heroku emitiu uma comunicação descrevendo especificamente como fazer isso e diluiu seus conselhos no site do desenvolvedor. O texto completo desta seção de seu e-mail está incluído abaixo:
Você sabia que os aplicativos Heroku podem compartilhar um banco de dados comum? Por exemplo, você pode colocar funções analíticas em um aplicativo separado do código voltado para o usuário.
Basta definir a var de configuração DATABASE_URL para vários aplicativos com o mesmo valor. Primeiro, obtenha o DATABASE_URL para seu aplicativo existente:
$ heroku config | grep DATABASE_URL --app sushi DATABASE_URL => postgres://lswlmfdsfos:5FSLVUSLLT123@ec2-123-456-78-90.compute1.amazonaws.com/ldfoiusfsf
Em seguida, defina DATABASE_URL para novos aplicativos com este valor:
$ 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
- agora ambos os aplicativos compartilharão um banco de dados.
Apenas como referência, o conselho original do Heroku era criar e usar uma API para acessar dados remotamente. Minha opinião pessoal é que, em geral, para muitas situações, este é um bom conselho (ou seja, melhor do que apenas conectar vários aplicativos ao mesmo banco de dados), embora eu possa ver situações em que isso seria mais problemático do que vale a pena.
ATUALIZAR
De acordo com os comentários sobre esta resposta, é importante notar que o Heroku se reserva o direito de alterar os URLs do banco de dados conforme necessário. Se isso ocorrer, as conexões secundárias falharão e você precisará atualizar os URLs de acordo.
Resposta de última hora à pergunta pertinente!
O Heroku oferece suporte oficialmente para uma solução melhor / elegante por meio de seu framework adicional agora. Ele é descrito em seu boletim informativo mais recente sobre como compartilhar addons entre aplicativos. Abaixo estão os snippets mencionados no artigo:
$ 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
heroku addons:attach originating_app_name::HEROKU_POSTGRESQL_COLOR_URL -a no_db_app_name
até onde eu sei, é possível - você terá que olhar as variáveis de configuração do heroku para o seu aplicativo com o banco de dados e, em seguida, definir o database_url no aplicativo que deseja compartilhar o banco de dados com o mesmo valor. Meio fora do caminho e quanto ao suporte, eu não sei.
EDITAR Só para descansar, criei dois aplicativos no Heroku - uma simples 'postagem' de suporte com um título.
http://evening-spring-734.heroku.com/posts é o mestre
http://electric-galaxy-230.heroku.com/posts - é o escravo
Portanto, as postagens criadas em qualquer um deles serão gravadas na URL do banco de dados evening-spring-734.
Tudo o que fiz foi usar a configuração do heroku para obter o DATABASE_URL de evening-spring-734 e definir o mesmo valor em DATABASE_URL de electric-galaxy-230.
Você pode acabar com algumas condições de corrida DB frutadas, mas é definitivamente possível fazer.
Magic hein?
Recebi isso no boletim informativo do Heroku recentemente. Estou enviando um e-mail para eles para descobrir se realmente é um uso aprovado.
VOCÊ SABIA?
Compartilhando um banco de dados com muitos aplicativos
Você sabia que os aplicativos Heroku podem compartilhar um banco de dados comum? Por exemplo, você pode colocar funções analíticas em um aplicativo separado do código voltado para o usuário.
Basta definir a
DATABASE_URL
var de configuração para vários aplicativos com o mesmo valor. Primeiro, obtenha oDATABASE_URL
para seu aplicativo existente:$ heroku config | grep DATABASE_URL --app sushi DATABASE_URL => postgres://lswlmfdsfos:5FSLVUSLLT123@ec2-123-456-78-90.compute-1.amazonaws.com/ldfoiusfsf
Em seguida, defina o
DATABASE_URL
para novos aplicativos com este valor:$ 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.
É isso - agora os dois aplicativos irão compartilhar um banco de dados.
O plugin Amazon RDS funciona bem para isso. Vários aplicativos podem compartilhar a mesma instância RDS.
Você tem a flexibilidade de fazer com que eles compartilhem tabelas ou evitar a colisão de nomes de tabelas usando o active_record.table_name_prefix.
Consulte a referência do Heroku: https://devcenter.heroku.com/categories/heroku-postgres
P: Vários aplicativos Heroku podem se conectar a um único banco de dados?
Sim. Você pode configurar vários aplicativos em execução no Heroku para se conectar a um único banco de dados, desde que você tenha as credenciais do banco de dados. Simplesmente substitua o DATABASE_URL dos aplicativos que você deseja conectar usando a configuração do heroku: adicione o comando DATABASE_URL = ....