ฉันต้องการเข้าถึงฐานข้อมูลของแอปจากแอป Heroku อื่น เป็นไปได้ในฐานข้อมูลที่ใช้ร่วมกันหรือไม่?
ฉันต้องการเข้าถึงฐานข้อมูลของแอปจากแอป Heroku อื่น เป็นไปได้ในฐานข้อมูลที่ใช้ร่วมกันหรือไม่?
คำตอบ:
ปรับปรุงแล้ว
ในขั้นต้นคำตอบนี้ระบุว่าแม้ว่าจะเป็นไปได้ด้วยเทคนิคเล็กน้อย แต่ก็ไม่ท้อถอยอย่างยิ่ง นี่เป็นไปตามคำแนะนำในเว็บไซต์สนับสนุนนักพัฒนา Heroku อย่างไรก็ตามเมื่อเร็ว ๆ นี้ Heroku ได้ออกการสื่อสารที่อธิบายถึงวิธีการบรรลุเป้าหมายนี้โดยเฉพาะและได้ให้คำแนะนำกับไซต์ของนักพัฒนาซอฟต์แวร์ ข้อความที่สมบูรณ์ของส่วนนี้ของอีเมลมีอยู่ด้านล่าง:
คุณรู้ไหมว่าแอพ Heroku สามารถแชร์ฐานข้อมูลทั่วไปได้? ตัวอย่างเช่นคุณสามารถใส่ฟังก์ชั่นการวิเคราะห์ในแอปพลิเคชันแยกต่างหากจากรหัสผู้ใช้ของคุณ
เพียงแค่ตั้งค่า DATABASE_URL config var สำหรับหลาย ๆ แอพให้เป็นค่าเดียวกัน ขั้นแรกรับ DATABASE_URL สำหรับแอปที่คุณมีอยู่:
$ heroku config | grep DATABASE_URL --app sushi DATABASE_URL => postgres://lswlmfdsfos:5FSLVUSLLT123@ec2-123-456-78-90.compute1.amazonaws.com/ldfoiusfsf
จากนั้นตั้งค่า DATABASE_URL สำหรับแอปใหม่เป็นค่านี้:
$ 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
- ตอนนี้ทั้งสองแอปจะแชร์ฐานข้อมูลเดียว
คำแนะนำดั้งเดิมของ Heroku คือการสร้างและใช้ API เพื่อเข้าถึงข้อมูลจากระยะไกลเพื่อเป็นจุดอ้างอิง มุมมองส่วนตัวของฉันคิดว่าโดยรวมแล้วสำหรับหลาย ๆ สถานการณ์นี่เป็นคำแนะนำที่ดี (เช่นดีกว่าเพียงแค่เชื่อมต่อหลายแอปพลิเคชันเข้ากับฐานข้อมูลเดียวกัน) แม้ว่าฉันจะเห็นสถานการณ์ที่น่าจะเป็นปัญหามากกว่าที่ควรจะเป็น
อัปเดต
ตามความคิดเห็นเกี่ยวกับคำตอบนี้เป็นที่น่าสังเกตว่า Heroku ขอสงวนสิทธิ์ในการเปลี่ยนแปลง URL ของฐานข้อมูลตามที่กำหนด หากสิ่งนี้เกิดขึ้นจะทำให้การเชื่อมต่อรองของคุณล้มเหลวและคุณจะต้องอัปเดต URL ตามนั้น
คำตอบที่ปลายเหตุสำหรับคำถามที่เกี่ยวข้อง!
Heroku สนับสนุนวิธีการแก้ปัญหาที่ดีกว่า / สง่างามอย่างเป็นทางการโดยใช้กรอบงาน addon ของพวกเขาในตอนนี้ มีอธิบายไว้ในจดหมายข่าวล่าสุดเกี่ยวกับวิธีแชร์ส่วนเสริมระหว่างแอพ ด้านล่างนี้เป็นตัวอย่างข้อมูลที่กล่าวถึงในการเขียน:
$ 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
ลิงก์: expand_the_power_of_add_ons
heroku addons:attach originating_app_name::HEROKU_POSTGRESQL_COLOR_URL -a no_db_app_name
เท่าที่ฉันรู้ว่ามันเป็นไปได้ - คุณจะต้องดูตัวแปรการกำหนดค่า heroku สำหรับแอปของคุณด้วยฐานข้อมูลจากนั้นตั้งค่า database_url บนแอปที่ต้องการแชร์ฐานข้อมูลเป็นค่าเดียวกัน ฉันไม่ทราบวิธีการที่ได้รับการสนับสนุน
แก้ไขเพียงเพื่อตั้งสติฉันได้หมุนแอพสองตัวบน Heroku - 'โพสต์' แบบง่ายๆพร้อมชื่อ
http://evening-spring-734.heroku.com/postsเป็นหลัก
http://electric-galaxy-230.heroku.com/posts - เป็นทาส
ดังนั้นโพสต์ที่สร้างขึ้นจะถูกเขียนไปยัง URL ฐานข้อมูลของ evening-spring-734
สิ่งที่ฉันทำคือใช้ heroku config เพื่อรับ DATABASE_URL ของ evening-spring-734 จากนั้นตั้งค่าเดียวกันใน DATABASE_URL ของ electric-galaxy-230
คุณสามารถจบลงด้วยเงื่อนไขการแข่งขัน fruity DB แต่เป็นไปได้ที่จะทำ
เวทมนตร์เหรอ?
ฉันได้รับสิ่งนี้ในจดหมายข่าว Heroku เมื่อเร็ว ๆ นี้ ฉันส่งอีเมลถึงพวกเขาเพื่อตรวจสอบว่าเป็นการใช้งานที่ได้รับอนุมัติจริงหรือ
เธอรู้รึเปล่า?
การแชร์ฐานข้อมูลเดียวกับหลายแอพ
คุณรู้ไหมว่าแอพ Heroku สามารถแชร์ฐานข้อมูลทั่วไปได้? ตัวอย่างเช่นคุณสามารถใส่ฟังก์ชั่นการวิเคราะห์ในแอปพลิเคชันแยกต่างหากจากรหัสผู้ใช้ของคุณ
เพียงตั้งค่า
DATABASE_URL
config varสำหรับหลาย ๆ แอพให้เป็นค่าเดียวกัน ขั้นแรกรับDATABASE_URL
แอปที่มีอยู่ของคุณ:
$ heroku config | grep DATABASE_URL --app sushi DATABASE_URL => postgres://lswlmfdsfos:5FSLVUSLLT123@ec2-123-456-78-90.compute-1.amazonaws.com/ldfoiusfsf
จากนั้นตั้งค่า
DATABASE_URL
สำหรับแอพใหม่เป็นค่านี้:
$ 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.
แค่นั้นแหละ - ตอนนี้ทั้งสองแอพจะแชร์ฐานข้อมูลเดียว
ปลั๊กอิน Amazon RDS ทำงานได้ดีสำหรับสิ่งนี้ แอพหลายตัวสามารถแชร์อินสแตนซ์ RDS เดียวกันได้
คุณมีความยืดหยุ่นที่จะให้พวกเขาแชร์ตารางหรือหลีกเลี่ยงการชนกันของชื่อตารางโดยใช้ active_record.table_name_prefix
ดูข้อมูลอ้างอิงของ Heroku: https://devcenter.heroku.com/categories/heroku-postgres
ถาม: แอปพลิเคชัน Heroku หลายตัวสามารถเชื่อมต่อกับฐานข้อมูลเดียวได้หรือไม่
ใช่. คุณสามารถกำหนดค่าแอพพลิเคชั่นหลายตัวที่ทำงานบน Heroku เพื่อเชื่อมต่อกับฐานข้อมูลเดียวโดยที่คุณมีข้อมูลประจำตัวของฐานข้อมูล เพียงแค่แทนที่ DATABASE_URL ของแอพที่คุณต้องการเชื่อมต่อโดยใช้การกำหนดค่า heroku: เพิ่ม DATABASE_URL = ...