8

ठीक मैं एक रेल कि एक PostgreSQL डेटाबेस में एक द्विआधारी क्षेत्र में छवियों को संग्रहीत करता है 3.1 अनुप्रयोग (मैं एक डेटाबेस में छवियों के संचय के साथ संभावित समस्याओं के बारे में पता कर रहा हूँ है, लेकिन ऐसा करने के लिए है अभी के लिए)। सब कुछ ओएसएक्स पर विकास मोड और चश्मा में स्थानीय रूप से ठीक काम करता है, लेकिन सभी छवियों को हेरोोक में तैनात ऐप में तोड़ दिया जाता है। मैंने सत्यापित किया है कि डेटाबेस में डेटा मेरी स्थानीय मशीन को उसी डेटाबेस पर इंगित करके सही है जो Heroku इंस्टेंस का उपयोग करता है, और सभी छवियां सही तरीके से प्रदर्शित होती हैं।ActiveRecord भार द्विआधारी क्षेत्र Heroku पर गलत तरीके से, पर OSX

तो, समस्या ActiveRecord में झूठ (Heroku पर चल रहा है) डेटाबेस से डेटा लोड हो रहा लगता है। मैं अनुमान लगा रहा हूं कि यह एक एन्कोडिंग मुद्दा है। रेलवे कंसोल को स्थानीय रूप से चलाना मैं सत्यापित कर सकता हूं कि इन फ़ील्ड का बाइटसाइज सही है, लेकिन हेरोकू पर रेल कंसोल चलाने से गलत बाइटसाइट बन जाता है। वास्तव में, हेरोकू पर ActiveRecord के माध्यम से एक एन बाइट फ़ाइल लोड करना सभी फ़ाइलों के लिए 2 एन + 1 के बाइटसाइट को परिणाम देता है।

किसी भी मदद की बहुत सराहना की जाती है।

+0

कॉलम प्रकार क्या है? –

+0

: रेलवे में बाइनरी, पोस्टटेरेस में बाइटिया। –

उत्तर

16

2n + 1 बदबू आ रही है की तरह आप पुराने बच गए प्रारूप के बजाय अपने bytea से हेक्स उत्पादन हो रही है। मेरा अनुमान है कि यह है कि आप एक समर्पित डेटाबेस का उपयोग कर रहे हैं और कि PostgreSQL 9.0 जो एक different default encoding for bytea है मतलब है:

जब PostgreSQL 9.x को PostgeSQL 8.x से पलायन आप बाइनरी स्ट्रिंग अनुकूलता में समस्याएं आती हैं कर सकते हैं। संस्करण 9 में डिफ़ॉल्ट प्रतिनिधित्व हेक्स है लेकिन संस्करण 8 यह बच निकलने के लिए सेट है। आप postgreSQL 9 का उपयोग मैन्युअल रूप से bytea_output को सेट करके सहेज सकते हैं।

मैं सही है तो आप ऊपर के लिंक में दिए गए निर्देशों का उपयोग करें या इस संक्षिप्त संस्करण का उपयोग कर सकते हैं:

  1. कमांड लाइन प्रकार में "Heroku config वार्स" आपके सिस्टम जानकारी पाने के लिए ।
  2. जो postgres://username:[email protected]/database_name तरह लग रहा है अपने DATABASE_URL से PostgreSQL उपयोगकर्ता नाम निकालें।
  3. PostgreSQL कंसोल प्राप्त करने के लिए heroku pg:psql का उपयोग करें।
  4. कंसोल से ALTER ROLE username SET bytea_output TO 'escape'; निष्पादित करें, बेशक, username उपयोगकर्ता नाम (1) से है।
  5. बाहर निकलें एक heroku restart आपके आवेदन को पुनः आरंभ करने के लिए क्या psql

फिर पुन: प्रयास करें और उम्मीद है कि आपको सही बाइट मिलेंगे।

+0

धन्यवाद! मैं वास्तव में उस दस्तावेज़ को पढ़ता हूं, लेकिन सोचा था कि यह मेरे मुद्दे पर नहीं था क्योंकि मेरे स्थानीय देव रेल सर्वर को उसी डेटाबेस (और उसी डेटाबेस उपयोगकर्ता का उपयोग करके) पर इंगित करने के बाद काम करने वाली छवियां थीं। मान लीजिए कि मैं अभी भी 100% ग्रोक नहीं करता हूं, लेकिन यह चाल चल रहा है। –

+0

जीनियस उत्तर, धन्यवाद! सभी नए स्टार्टर के लिए http://stackoverflow.com/questions/12084414/binary-data-getting-borked-when-saving-to-postgresql – devth

+2

FYI करें, हम Heroku Postgres में यह डिफ़ॉल्ट बना दिया है: यह मेरा बहुत समान समस्या हल हो जाती स्तरीय डेटाबेस ('SET bytea_output TO 'escape'')। आप इसे pg_settings से सेटिंग का चयन करके सत्यापित कर सकते हैं, जहां नाम = 'bytea_output'; ' – hgmnz

संबंधित मुद्दे