2010-01-02 15 views
5

मैं रूबी एप्लिकेशन (रेल नहीं) बनाना चाहता हूं। यह एक कंसोल ऐप है जिसे कुछ डेटा जारी रखने की आवश्यकता होगी। मैं डेटाबेस के रूप में pstore का उपयोग कर रहा हूँ। मैं इस एप्लिकेशन को एक मणि के रूप में तैनात करना चाहता हूं।लगातार डेटा के साथ रूबी रत्न

मेरा प्रश्न है: मेरा डेटा कहां रहता है?

वर्तमान में मैंने मानक मणि लेआउट में बिन निर्देशिका में एक भाई के रूप में एक डेटा निर्देशिका बनाई है। इसलिए, मैं उम्मीद करता हूं कि मणि तैनात होने के बाद अपने डेटा को "अंदर ही" संग्रहीत करेगा। लेकिन जब मैं स्थानीय मणि परीक्षण करने के लिए स्थापित करता हूं, तो मुझे लगता है कि डेटा स्थानीय रूप से प्रोजेक्ट फ़ाइलों में संग्रहीत किया जा रहा है, कहीं भी रत्न निर्देशिका के अंदर नहीं।

बेशक यह मैं गलत समझ सकता हूं कि "रेक install_gem" क्या कर रहा है। इसके अलावा, मैं बेहद चिंतित हूं कि अगर मुझे मणि स्थापित करने के लिए सूडो की आवश्यकता है, तो यह वास्तव में मणि निर्देशिका में "स्वयं के अंदर" डेटा फ़ाइल बनाने में सक्षम होगा।

क्या कोई इसे थोड़ा सा स्पष्ट कर सकता है?

धन्यवाद। जॉन शंक

@ मेकवोइड - उत्तर के लिए धन्यवाद। यहां मेरी मुख्य लिपि की संपूर्णता है।/Bin निर्देशिका में ... (मैं इसे मुख्य प्रश्न है क्योंकि मैं कैसे एक टिप्पणी में सामग्री को स्वरूपित करने से परिचित नहीं हूँ को जोड़ा गया - और चिपकाया कोड भयंकर देखा

#!/usr/bin/env ruby 

$LOAD_PATH.unshift File.dirname(__FILE__) + '/../lib' 

require 'timesheet' 

begin 
    command_hash = TimesheetParser.parse 
    store = YAML::Store.new("data/time_entries.yaml") 
    tl = TimeLog.new(store) 
    ts = Timesheet.new(tl) 
    ts.process(command_hash) 
rescue Exception => e 
    raise if command_hash[:debug] 
    puts e.message 
+0

क्या आप प्रिंट कर सकते हैं और हमें बता सकते हैं कि आपकी पीएसटीओआर फाइल सहेजी जा रही है? क्या यह आपके प्राथमिक मणि लोड पथ में है? (* मणि env * इसे समझने के लिए) – makevoid

+0

मैंने मूल पोस्ट में विवरण जोड़ा, क्योंकि टिप्पणियों में समृद्ध संपादन क्षमताओं के रूप में प्रतीत नहीं होता है – jschank

+0

ठीक है, तो ऐसा लगता है कि मैं जोहान्स द्वारा पोस्ट किए गए उत्तर का उपयोग करना चाहता हूं, और शायद एनएनवी ["timesheet_home"] की तरह कुछ ऐसा करें ताकि उपयोगकर्ता स्थान ओवरराइड कर सकें, जोहान्स के जवाब में एनवी ["HOME"] और कुछ मानक स्थान पर वापस आ सकें। और एक स्पष्टीकरण के साथ विफल, अगर न तो सेट है। धन्यवाद, हर कोई जिसने उत्तर दिया! – jschank

उत्तर

11

लिनक्स पर वहाँ दो आम हैं। चर डेटा भंडारण के लिये प्रयुक्त स्थानों।

/home/user/.application

प्रत्येक उपयोगकर्ता की जरूरत है यह यह आम तौर पर उन घर निर्देशिका में अपने भंडारण के लिए उपयोगकर्ताओं को घर निर्देशिका में किया जाता है। पथ स्वयं भंडारण अगर चाहिए

ENV["HOME"] + "/." + $application_name 

/var/lib/आवेदन

सभी उपयोगकर्ताओं, भंडारण साझा करने या आवेदन केवल एक उपयोगकर्ता (सबसे डेमॉन) द्वारा संचालित करने का इरादा है, तो/var डेटा के सभी प्रकार के स्टोर करने के लिए सही जगह है।

  • लॉग
  • के लिए के लिए /var/log
  • /var/run पीआईडी ​​के
  • ताला फ़ाइलों के लिए /var/lock
  • httpservers
  • /var/tmp महत्वपूर्ण नहीं के लिए लेकिन सतत् डेटा
  • /var/lib अन्य सभी डेटा के लिए के लिए /var/www

/var में अपने भंडारण के लिए पथ होना चाहिए

"/var/lib/" + $application_name 

सुनिश्चित करें, इस निर्देशिका के लिए अनुमतियाँ इस तरह के हैं, तो आप रूट के रूप में अपने आवेदन चलने देने के लिए की जरूरत नहीं है कि।

+0

मैंने ऐसा कुछ करने का विचार किया था, लेकिन मुझे चिंता थी कि यह विंडोज़ पर काम नहीं करेगा। क्या इस मंच पर इसे पार मंच बनाने के लिए एक अलग मोड़ है? या यह तकनीक विंडोज़ पर भी काम करेगी? (क्या विंडोज़ "होम" पर्यावरण चर को पूर्व परिभाषित करता है?) – jschank

+0

इसके अलावा, क्या मैं इसे सही पढ़ता हूं, जिसमें उपयोगकर्ता स्थान में एपडाटा एक डॉटफाइल निर्देशिका में जाता है, लेकिन साझा में यह एक गैर-डॉटफाइल फ़ोल्डर में जाता है/var/lib? या वह /var/lib/.plplication होना चाहिए? धन्यवाद! जॉन – jschank

+0

यह सही है। यूनिक्स में डॉटफाइल छिपी हुई फाइलें हैं। तो उपयोगकर्ता मानकता को इस कॉन्फ़िगरेशन फ़ाइलों को अपनी होम निर्देशिका में नहीं देखता है। उन्हें/var/lib में अदृश्य बनाने में कोई बात नहीं है। – johannes

0

आप निश्चित रूप से मणि निर्देशिका के अंदर डेटा स्टोर नहीं करना चाहते हैं। अपेक्षित व्यवहार यह है कि उपयोगकर्ता बिना किसी समस्या के रत्नों को अनइंस्टॉल और पुनर्स्थापित कर सकते हैं।यदि आपके पास अपने मणि की स्थापित निर्देशिका में डेटा है, तो मणि को अनइंस्टॉल करने से वह डेटा नष्ट हो जाएगा और आपके उपयोगकर्ताओं को बंद कर दिया जाएगा।

जोहान्स के लिनक्स पर उपयोग के लिए सही विचार हैं। मैक के लिए विशिष्ट निर्देशिका थोड़ा अलग होगी। विंडोज के लिए भी यही है। आपको यह जानने की आवश्यकता होगी कि आप जिस प्लेटफ़ॉर्म को लक्षित करना चाहते हैं उसके लिए सही स्थान क्या हैं और आपका कोड सशर्त रूप से स्टोरेज स्थानों को स्विच करता है, यह किस प्रकार के होस्ट पर चलता है।

उपयोगकर्ताओं को अपने डिफ़ॉल्ट ओवरराइड करने के लिए मत भूलना। ऐसा करने का एक तरीका उन्हें बहुत खुश कर देगा :)

+0

हम्म, अनइंस्टॉल करने के बारे में, यह समझ में आता है। हालांकि, मुझे यकीन नहीं है कि इस मामले में डिफ़ॉल्ट को ओवरराइड कैसे करें। जब तक उपयोगकर्ता पर्यावरण चर सेट करने की तरह कुछ करता है। चूंकि ऐप कुछ स्थान पर डेटा स्टोर बनाएगा, और प्रत्येक कमांड को उस स्थान पर वापस जाने की आवश्यकता होगी। (और मैं प्रत्येक कमांड के साथ डेटा स्टोर स्थान निर्दिष्ट नहीं करना चाहता) क्या कोई जानता है कि रनटाइम पर निष्पादन प्लेटफॉर्म को रूबी में कैसे निर्धारित किया जाए? – jschank

+0

एक स्थिर RUBY_PLATFORM है जो आपको प्लेटफ़ॉर्म निर्धारित करने देना चाहिए। पर्यावरण चर डिफ़ॉल्ट लोगों को डिफ़ॉल्ट को ओवरराइड करने का एक शानदार तरीका है। आखिरकार, यदि वे चूक को ओवरराइड कर रहे हैं तो उन्हें एक अधिक परिष्कृत उपयोगकर्ता होना चाहिए जो ऐसा कुछ संभाल सके। – edebill

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