2015-08-14 29 views
8

में पुनरारंभ नहीं होता है, मैं सरल ब्लॉग सिस्टम बनाने के लिए उल्का का उपयोग कर रहा हूं। साइटमैप फ़ाइलों के लिए मैं this पैकेज का उपयोग कर रहा हूं।साइटमैप तब तक नहीं बनाया गया जब तक सर्वर उल्का

मैं कुछ सर्वर स्टार्टअप समारोह (कुछ पोस्ट बनाने) में डेटा को प्रारंभ और (प्रथम श्रेणी और आदि के लिए जैसे sitemap1.xml) सर्वर में कोड (सर्वर/sitemaps.js) नीचे का इस्तेमाल किया प्रत्येक श्रेणी के लिए साइटमैप बनाने के लिए जोड़ा :

function sitemapOutput(categoryName){ 
    var out = [], posts = Posts.find({ category: categoryName }).fetch(); 
    _.each(posts, function(post) { 
     out.push({ 
      page: post.url(), 
      lastmod: post.insertDate, 
      changefreq: 'weekly' 
     }); 
    }); 
    return out; 
} 

Categories.find().forEach(function(Category, index) { 
    sitemaps.add('/sitemap' + (index+1) +'.xml', 
     function(){ return sitemapOutput(Category.name); }); 
}); 

और मैं इस तरह प्रारंभ करेंगे तो है: (सर्वर/startup.js)

Meteor.startup(function() { 
    // some post and category created here 
}); 

लेकिन साइटमैप सर्वर को पुनः आरंभ जब तक अस्तित्व में नहीं था मेरी robots.t (xt फ़ाइलें भी खाली) लेकिन जब सर्वर ने मेरे लिए बनाई गई साइटमैप और robots.txt सामग्री को पुनरारंभ किया।

मुझे लगता है कि sitemaps.js के बाद पोस्ट डाले गए हैं लेकिन समस्या क्या है और इसे कैसे ठीक किया जाए?

नई कोशिश:

मैं नीचे की तरह नए समाधान की कोशिश लेकिन इस कोड को भी काम नहीं किया। (मैं अलग साइटमैप फ़ाइल बनाने के लिए प्रत्येक 10000 वर्ग बड़ा साइटमैप और गूगल साइटमैप त्रुटि को रोकने के लिए के लिए चाहते हैं):

for (var i=0;i<=Math.round(Categories.find().count()/10000);i++) { 
    sitemaps.add('/sitemap' + i +'.xml', function(){ 
     var out = []; 
     Categories.find({}, {sort: {insertDate: 1} ,limit: 10000, skip: i * 10000}).forEach(function(Category) { 
      out.push({ 
       page: "/category/" + Category.title + "/" + Category._id, 
       lastmod: Category.insertDate, 
       changefreq: 'weekly' 
      }); 
     }); 
     return out; 
    }); 
} 

robots.txt शो साइटमैप फ़ाइलों को सही ढंग लेकिन सभी साइटमैप इस तरह खाली है:

<urlset> </urlset> 

sitemaps.add() कब चलाता है? मुझे लगता है कि यह सर्वर पुनरारंभ पर करता है लेकिन नया प्रयास मुझे निराश करता था और मुझे लगता है कि मेरा अनुमान गलत है और यदि sitemaps.add() चलाया गया था तो यह खाली क्यों है।

+0

आपकी फ़ोल्डर संरचना कैसी है? – forallepsilon

+0

मैंने प्रश्न में वर्णित किया। मेरे पास सर्वर फ़ोल्डर – b24

उत्तर

3

आपकी समस्या प्रतीत होती है फ़ोल्डर संरचना होने के लिए। आपने कहा है कि आपके पास /server/sitemaps.js और /server/startup.js हैं और आप चाहते हैं कि साइटमैप आपके स्टार्टअप के बाद चलाए जाएंगे, लेकिन बात यह है कि उल्का उन फ़ाइलों को वर्णानुक्रम से चलाएगा, इसलिए साइटमैप स्टार्टअप से पहले आता है। यदि आप अपने startup.js को lib फ़ाइल के अंदर रखते हैं, जैसे कि /server/lib/startup.js, आपको वांछित परिणाम मिलेंगे, क्योंकि उल्का दूसरों के सामने lib फ़ोल्डर चलाएगा।

+0

मुझे लगता है कि वर्णमाला क्रमशः यहां नहीं है क्योंकि sitemaps.js कोड अनुक्रम क्रम में /sitemap.xml पर जाने पर रूट के रूप में चलाया जाता है। दूसरे कोड के बारे में आपका क्या विचार है? – b24

+0

आपने यह नहीं कहा कि आपके पास साइटमैप प्रदर्शित करने का मार्ग है। क्या आप यहां रूट कोड पोस्ट कर सकते हैं? साथ ही, आपने कहा कि दूसरा कोड आपको robots.txt में सही परिणाम देता है, लेकिन कोड उत्पन्न robots.txt क्या है? क्या इसमें सभी sitemap1.xml, sitemap2.xml, आदि सही तरीके से हैं? –

+0

मैंने कहा कि दूसरा कोड मार्ग के रूप में काम करता है। हां robots.txt में सभी साइटमैप शामिल हैं (sitemap1.xml, sitemap2.xml, ...) लेकिन सभी फाइलें खाली हैं। – b24

1

यह सामान्य व्यवहार है, Meteor.startup पर कोड ऐप शुरू होने पर बस एक बार चलाएगा। यदि आप इस फ़ंक्शन को फिर से चलाने के लिए देख रहे हैं तो आपको क्लाइंट से फ़ंक्शन को कॉल करने के लिए उल्का विधि का उपयोग करने की आवश्यकता है या आप दोहराने वाली नौकरियों को चलाने के लिए क्रॉन जॉब जैसे कुछ का उपयोग कर सकते हैं, यह एक शानदार पैकेज है https://atmospherejs.com/percolate/synced-cron

+0

में sitemaps.js है, मैं अपना स्टार्टअप कोड फिर से चलाने के लिए नहीं चाहता हूं। मेरा स्टार्टअप कुछ प्रारंभिक डेटा है लेकिन साइटमैप में प्रदर्शित नहीं हुआ है। – b24

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

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