हेरोोकू - रूबी-ऑन-रेल, डेटाबेस, हेरोकू, परिनियोजन के लिए एक ही टेबल को धक्का देना

मुझे पता है heroku pg:push आदेश जो हरोकू तक एक संपूर्ण डेटाबेस को धक्का देता है।

अब जब मैं अपना उत्पाद लॉन्च कर रहा हूं, तो मैं केवल एक विशिष्ट तालिका को धक्का दे पाऊंगा जिसमें मौजूदा टेबल (जैसे उपयोगकर्ता) को ओवरराइट किए बिना स्थानीय रूप से एकत्र की गई जानकारी शामिल हो।

क्या कोई ऐसा आदेश है जो मुझे केवल विशिष्ट तालिकाओं को उसकेोकू में धक्का दे सकता है?

उत्तर:

उत्तर № 1 के लिए 10

मेरा सुझाव है कि सीधे पोस्टग्रेएसक्यूएल डंप / पुनर्स्थापित क्षमताओं का उपयोग करना pg_dump तथा psql आदेश देता है।

साथ में pg_dump आप अपने स्थानीय डेटाबेस से एक विशिष्ट तालिका डंप कर सकते हैं

$ pg_dump --data-only --table=products sourcedb > products.sql

फिर कॉन्फ़िगरेशन से Heroku PostgreSQL कनेक्शन स्ट्रिंग को पकड़ें

$ heroku config | grep HEROKU_POSTGRESQL

# example
# postgres://user3123:[email protected].com:6212/db982398

और Heroku से पुनर्प्राप्त जानकारी का उपयोग कर, दूरस्थ डेटाबेस में तालिका को पुनर्स्थापित करें।

$ psql -h ec2-117-21-174-214.compute-1.amazonaws.com -p 6212 -U user3123 db982398 < products.sql

आपको अनुकूलित करना होगा -p, -h तथा -U पैरामीटर, साथ ही डेटाबेस नाम। पासवर्ड से संकेत मिलेगा psql

आप भी इसका उपयोग कर सकते हैं pg_restore एक डंप फ़िल्टर करने और तालिका को बहाल करने के लिए, लेकिन मैं व्यक्तिगत रूप से पसंद करते हैं psql

ध्यान दें कि Heroku कई दस्तावेजों में PostgreSQL उपकरण के उपयोग की सिफारिश कर रहा है, जैसे कि आयात और निर्यात बड़े डेटा के लिए, या जब भी प्रदान किए गए सीएलआई आदेश इस प्रश्न में एक जैसे विशिष्ट मामलों को कवर नहीं करते हैं।


जवाब के लिए 0 № 2

मैंने स्क्रिप्ट लिखी जो उसकेोकू से डीबी यूआरएल निकालती है। फिर यह उत्पादन से एकल तालिकाओं को डंप करता है और उन्हें विकास / लोकलहोस्ट पर पुनर्स्थापित करता है। इसे इस तरह से चलाएं:

rake production_to_development:run["users;news;third_table",my-sushi-app]

कोड:

namespace :production_to_development do
task :run, [:tables, :app] => [:environment] do |t, args|
tables = args["tables"].split(";")
database_url = nil
Bundler.with_clean_env { database_url = `heroku config:get DATABASE_URL --app=#{args["app"]}` }

require "addressable/uri"
uri = Addressable::URI.parse(database_url)
remote_database = uri.path[1,uri.path.length-2] # there is n at the end of the path!

tables.each do |table|
backup_file = "tmp/#{table}.backup"
#bin_dir = "/Applications/Postgres.app/Contents/Versions/latest/bin"
bin_dir = ""

dump_command = "PGPASSWORD=#{uri.password} #{bin_dir}/pg_dump --file "#{backup_file}" --host "#{uri.host}" --port "#{uri.port}" --username "#{uri.user}" --no-password --verbose --format=c --blobs --table "public.#{table}" "#{remote_database}""
`#{dump_command}`
`psql -U "root" -d my_table -c "drop table if exists #{table}"`
`pg_restore -d my_table --no-owner  #{backup_file}`
end

end
end

उत्तर № 3 के लिए -1

अगर मैं सही ढंग से समझता हूं, तो आपको केवल एक की आवश्यकता हैस्थानीय रूप से बनाए गए डेटा के साथ डेटाबेस तालिका आपके रेल उत्पादन एप पर धकेलती है। शायद यह एक सरल दृष्टिकोण है, लेकिन आप अपनी तालिका के लिए माइग्रेशन बना सकते हैं और फिर उपयोग करके पॉप्युलेट कर सकते हैं db/seeds.rb

आपके बाद "seed.rb फ़ाइल को पॉप्युलेट किया है और अपने रेपो को उसकेोकू में धक्का दिया है:

heroku run rake db:migrate
heroku run rake db:seed

इसके अलावा, यदि आपकी स्थानीय तालिका में डेटा का एक टन है और आप रेल 4 का उपयोग कर रहे हैं, तो बीज डंप मणि देखें: https://github.com/rroblak/seed_dump। यह आपके मौजूदा डीबी डेटा ले जाएगा और इसे बीज प्रारूप में मैप करेगा।


संबंधित सवाल
सबसे लोकप्रिय