2012-09-20 28 views
7

क्या कोई मुझे बता सकता है कि नीचे दिया गया कोड निम्न त्रुटि क्यों फेंकता है? :मेटियर शिकायत क्यों करता है कि संग्रह के लिए एक सम्मिलित विधि पहले ही परिभाषित है?

Error: A method named '/players/insert' is already defined 

मैं उल्का और कॉफ़ीस्क्रिप्ट के लिए नया हूं इसलिए मैं कुछ सरल दिख रहा हूं।

[[[[[ ~/dev/meteor/leaderboard ]]]]] 

Running on: http://localhost:3000/ 

node.js:201 
     throw e; // process.nextTick error, or 'error' event on first tick 
      ^
Error: A method named '/players/insert' is already defined 
    at app/packages/livedata/livedata_server.js:744:15 
    at Function.<anonymous> (app/packages/underscore/underscore.js:84:24) 
    at [object Object].methods (app/packages/livedata/livedata_server.js:742:7) 
    at new <anonymous> (app/packages/mongo-livedata/collection.js:111:13) 
    at app/leaderboard.js:4:11 
    at /Users/alex/dev/meteor/leaderboard/.meteor/local/build/server/server.js:109:21 
    at Array.forEach (native) 
    at Function.<anonymous> (/Users/alex/dev/meteor/leaderboard/.meteor/local/build/server/underscore.js:76:11) 
    at /Users/alex/dev/meteor/leaderboard/.meteor/local/build/server/server.js:95:7 
Exited with code: 1 

मैं उल्का संस्करण 0.4.0 (8f4045c1b9)

चल रहा हूँ:

### 
Set up a collection to contain player information. On the server, 
it is backed by a MongoDB collection named "players." 
### 
Players = new Meteor.Collection("players") 

if Meteor.is_client 
    Template.leaderboard.players = -> 
    Players.find({}, {sort: {score: -1, name: 1}}) 

    Template.leaderboard.selected_name = -> 
    player = Players.findOne(Session.get "selected_player") 
    player and player.name 

    Template.player.selected = -> if Session.equals("selected_player", this._id) then "selected" else '' 

    Template.leaderboard.events = { 
    'click input.inc': -> 
     Players.update(Session.get("selected_player"), {$inc: {score: 5}}) 
    } 

    Template.player.events = { 
    'click': -> 
     Session.set("selected_player", this._id) 
    } 

# On server startup, create some players if the database is empty. 
if Meteor.is_server 
    Meteor.startup -> 
    if Players.find().count() is 0 
     names = [ 
       "Ada Lovelace" 
       "Grace Hopper" 
       "Marie Curie" 
       "Carl Friedrich Gauss" 
       "Nikola Tesla" 
       "Claude Shannon" 
       ] 
     Players.insert({name: name, score: Math.floor(Math.random()*10)*5}) for name in names 

पूर्ण स्टैक ट्रेस इस प्रकार है:

यहाँ लीडरबोर्ड उदाहरण के अपने बंदरगाह Coffeescript करने के लिए

सहायता के लिए अग्रिम धन्यवाद!

+2

क्या आपकी पूरी परियोजना कहीं कहीं प्रकाशित करना संभव है? मुझे लगता है कि आपकी समस्या संग्रह को दो बार परिभाषित कर रही है .. शायद आपने मूल .js फ़ाइल को नहीं हटाया है? –

उत्तर

0

यह कॉफ़ीलिंट (एनपीएम के साथ विश्व स्तर पर स्थापित) के साथ एक कॉन्फ़िगरेशन समस्या प्रतीत होता है।

मैंने मूल रूप से कॉफ़ीलिंट स्थापित किया ताकि यह जांच सके कि मेरा कॉफ़ीस्क्रिप्ट कोड सही था और इसमें कोई त्रुटि नहीं थी।

मैं निर्देशों के अनुसार के साथ के रूप में coffeelint स्थापित:

sudo npm install -g coffeelint

coffeelint ठीक काम किया जब चलाने के स्टैंड-अलोन .coffee फ़ाइलों के खिलाफ।

हालांकि, कॉफ़ीस्क्रिप्ट पैकेज के साथ किसी भी उल्का प्रोजेक्ट को चलाने पर मुझे उपर्युक्त त्रुटि मिली।

एक सनकी पर, मैंने सोचा कि त्रुटि मेरे exisiting नोड स्थापित के साथ संघर्ष के कारण हो सकता है।

मैं के साथ पहली coffeelint की स्थापना रद्द करने का फैसला किया:

sudo npm uninstall -g coffeelint

और फिर पहले से उल्का-उत्पन्न leaderboard.js फ़ाइल हटा दी।

उल्का फिर से शुरू करने के बाद उपरोक्त कॉफ़ीस्क्रिप्ट उदाहरण त्रुटियों के बिना अपेक्षित काम करता है।

+0

"और फिर पहले उल्का उत्पन्न जेनरबोर्ड.जेएस फ़ाइल हटा दी गई" - जैसा कि अन्य ने कहा है, यह त्रुटि उल्का द्वारा दो बार एक ही संग्रह को तत्काल करने के कारण होती है। –

0

चलती (यानी कॉपी करने और हटाने से मूल) कोशिश

Players = new Meteor.Collection("players")

if Meteor.is_client नीचे एक बार और नीचे if Meteor.is_server

किसी अन्य समय मैं नहीं जानता कि वास्तव में क्यों, के रूप में मैं नया हूँ उल्का के लिए, लेकिन यह मेरे लिए काम करता है, मुझे लगता है कि सर्वर पक्ष को इसके स्वयं के संदर्भ की आवश्यकता है, साथ ही ग्राहक, हालांकि दायरे के बाहर घोषित करना वही करना चाहिए (शायद एक बग, याद रखें कि वे अभी भी 0.5 पर हैं। 0 पूर्वावलोकन, जो एम बनाता है और लगता है कि आप अपग्रेड करना चाहते हैं और नए संस्करण के साथ कुछ नए स्मार्ट पैकेजों को आजमा सकते हैं, ऐसा लगता है कि आप 0.4 का उपयोग कर रहे हैं), लेकिन जब मेरे सर्वर में फाइलें कुछ भी पहचान नहीं पाएंगी तो मैंने उल्का की मूल निर्देशिका परिभाषित की है (जो इन फ़ाइलों को क्लाइंट और सर्वर दोनों पर धक्का देता है), मैंने सर्वर के अपने संदर्भ को परिभाषित किया, और मुझे एक ही त्रुटि मिली, और जब तक मैंने सर्वर और ग्राहक को अपनी प्रतिलिपि देने के संदर्भ के 'सार्वजनिक' घोषणा को स्थानांतरित नहीं किया, कुछ भी काम नहीं किया ।

उम्मीद है कि मदद करता है कि ...

+0

धन्यवाद जय - मैंने अपनी समस्या का स्रोत खोज लिया और मेरे अपने प्रश्न का उत्तर दिया। समस्या कॉफ़ीलिंट के स्थापित संस्करण के साथ एक संघर्ष के कारण थी (नीचे विवरण देखें)। – AlexEberts

12

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

+0

धन्यवाद, यह मेरा दिन हल हो गया। मेरे पास एक SublimeText प्लगइन गलत कॉन्फ़िगर किया गया था जिसने .js फ़ाइल को .coffee पर प्रत्येक सहेजने की क्रिया का उत्पादन किया था। इसलिए मुझे क्लाइंट और सर्वर दोनों फाइलों को डुप्लिकेट किया गया। – Hamal000

+0

धन्यवाद, मुझे बहुत समय बचाया। – jamesscaggs

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