2015-08-14 18 views
8

Basit bir blog sistemi oluşturmak için meteor kullanıyorum. Site haritaları dosyaları için this paketini kullanıyorum. site haritası oluşturuluncaya kadar sunucu oluşturulmamış.

bazı sunucu devreye alma işlevi (bazı yayın oluşturma) veri başlaması ve her bir kategori için site haritası oluşturmak için sunucu kodu ( sunucu/sitemaps.js) aşağıdaki (ilk kategorisinde vb örneğin sitemap1.xml) ilave :

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); }); 
}); 

Ve böyle başlangıç ​​adres: ((sunucu/ startup.js)

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

Fakat site haritaları sunucu yeniden başlatma kadar yoktu benim robots.t xt dosyaları da boştur), ancak sunucu sitemaps ve robots.txt içeriği benim için oluşturulduğunda yeniden başlattı.

Sitemaps.js'den sonra gönderilen iletiler olduğunu düşünüyorum, ancak sorun nedir çocuklar ve bunu nasıl düzeltebilirim?

Yeni deneyin:

aşağıda gibi yeni bir çözüm çalışıyorum ama bu kod da işe yaramadı. (Ben her 10000 kategori büyük site haritası google site haritası hatayı önlemek için ayrı haritası dosyasını oluşturmak istiyorum):

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 gösteri site haritası dosyaları doğru ancak tüm site haritası böyle boş:

<urlset> </urlset> 

Sitemaps.add() ne zaman çalışır? Ben sunucu yeniden başlatır ama Yeni deneyin beni hayal kırıklığına uğrattı ve sanırım benim tahminim yanlış olduğunu düşünüyorum ve sitemaps.add() neden boş olduğunu çalıştırdı.

+0

Klasörünüzün yapısı nasıl? – forallepsilon

+0

Sorunu açıkladım. Sunucu klasörü – b24

cevap

3

Sorununuz görünüyor klasör yapısı. /server/sitemaps.js ve /server/startup.js olduğunu ve site haritalarının açılışınızdan sonra çalışacağını, ancak Meteor'ın bu dosyaları alfabetik olarak çalıştıracağını, böylece site haritasının başlatmadan önce geleceğini söylemiştiniz. Startup.js'nizi /server/lib/startup.js gibi bir lib klasörüne yerleştirirseniz, istediğiniz sonuçları elde edersiniz, çünkü Meteor lib klasörünü diğerlerinden önce çalıştırır.

+0

Ben alfabetik sırayla burada düşünün çünkü sitemaps.js kodu /sitemap.xml sıra sırayla değil ziyaret ederken rota olarak çalıştırın. İkinci kod hakkındaki fikrin nedir? – b24

+0

Site haritalarınızı görüntülemek için bir yolunuz olduğunu söylemediniz. Rota kodunu buraya gönderebilir misin? Ayrıca, ikinci kodun robots.txt dosyasında size doğru sonuçları verdiğini, ancak kodun robots.txt'yi oluşturduğunu söylediniz? Tüm siteemap1.xml, sitemap2.xml, vb. Doğru mu? –

+0

İkinci kodun rota olarak çalıştığını söyledim. Evet robots.txt tüm site haritalarını (sitemap1.xml, sitemap2.xml, ...) içerir, ancak tüm dosyalar boştur. – b24

1

Normal davranış, Meteor.startup'daki kod uygulama başlangıcında yalnızca bir kez çalışır. Eğer bu fonksiyonu tekrar çalıştırmak istiyorsanız, ya istemciden işlevi çağırmak için meteor yöntemini kullanmanız gerekir ya da burada tekrarlanan işleri çalıştırmak için cron işi gibi bir şey kullanabilirsiniz. https://atmospherejs.com/percolate/synced-cron

+0

bir sitemaps.js var Başlangıç ​​kodumu yeniden çalıştırmak istemiyorum. Girişim bazı verileri başlatıyor, ancak site haritalarında gösterilmiyor. – b24

İlgili konular