10

के साथ विफल रहता है, मैं अपने रेल 3.1 ऐप को उत्पादन में तैनात करने के लिए तैयार हूं, और चूंकि मैं संपत्ति पाइपलाइन, I need to precompile my assets का उपयोग कर रहा हूं।बंडल निष्पादन रेक संपत्तियां: प्रीकंपाइल 'अप्रत्याशित टोकन'

$ bundle exec rake --trace assets:precompile 
** Invoke assets:precompile (first_time) 
** Execute assets:precompile 
/home/adam/.rvm/rubies/ruby-1.9.3-p0/bin/ruby /home/adam/.rvm/gems/[email protected]/bin/rake assets:precompile:all RAILS_ENV=production RAILS_GROUPS=assets --trace 
** Invoke assets:precompile:all (first_time) 
** Execute assets:precompile:all 
** Invoke assets:precompile:primary (first_time) 
** Invoke assets:environment (first_time) 
** Execute assets:environment 
** Invoke environment (first_time) 
** Execute environment 
** Invoke tmp:cache:clear (first_time) 
** Execute tmp:cache:clear 
** Execute assets:precompile:primary 
rake aborted! 
399: unexpected token at '"/*!\u000a * jQuery JavaScript Library v1.7.1\u000a * http://jquery.com/\u000a *\u000a * Copyright 2011, John Resig\u000a * Dual licensed under the MIT or GPL Version 2 licenses.\u000a * http://jquery.org/license\u000a *\u000a * Includes Sizzle.js\u000a * http://sizzlejs.com/\u000a * Copyright 2011, The Dojo Foundation\u000a * Released under the MIT, BSD, and GPL Licenses.\u000a *\u000a * Date: Mon Nov 21 21:11:03 2011 -0500\u000a */\u000afunction addActiveScaffoldPageToHistory(a,b){if(typeof 

(in /data/music/RotC/eventbook/app/assets/javascripts/application.js) 
/home/adam/.rvm/gems/[email protected]/gems/json-1.6.4/lib/json/common.rb:148:in `parse' 
/home/adam/.rvm/gems/[email protected]/gems/json-1.6.4/lib/json/common.rb:148:in `parse' 
/home/adam/.rvm/gems/[email protected]/gems/multi_json-1.0.4/lib/multi_json/engines/json_common.rb:9:in `decode' 
/home/adam/.rvm/gems/[email protected]/gems/multi_json-1.0.4/lib/multi_json.rb:76:in `decode' 
/home/adam/.rvm/gems/[email protected]/gems/execjs-1.2.13/lib/execjs/external_runtime.rb:61:in `extract_result' 
/home/adam/.rvm/gems/[email protected]/gems/execjs-1.2.13/lib/execjs/external_runtime.rb:27:in `block in exec' 
/home/adam/.rvm/gems/[email protected]/gems/execjs-1.2.13/lib/execjs/external_runtime.rb:40:in `compile_to_tempfile' 
/home/adam/.rvm/gems/[email protected]/gems/execjs-1.2.13/lib/execjs/external_runtime.rb:26:in `exec' 

[सामान के बहुत सारे कटाव] [बहुत अधिक सामान कटाव]

यहाँ मेरी application.js है: हालांकि, जब मैं यह कोशिश, मैं जाहिरा तौर पर jQuery संकलन से संबंधित कोई त्रुटि मिलती है :

//= require jquery 
//= require jquery_ujs 
//= require jquery-ui 
// 
// N.B. jQuery requires have to come before this: 
//= require active_scaffold 

मैं डिफ़ॉल्ट कंप्रेसर का उपयोग कर रहा हूं, यानी uglifier

मैंने पाया है कि अगर मैं config/environments/production.rb में false को config.assets.compress बदल तो यह ठीक काम करता है, लेकिन निश्चित रूप से मेरे ऐप में बेहतर प्रदर्शन करता है, तो मैं true के रूप में रखना एक तरह से यह पता लगाने सकता है।

मैंने rake assets:precompile doesn't work (rails 3.1.1) पर देखा है और मुझे नहीं लगता कि यह एक डुप्लिकेट है क्योंकि त्रुटि undefined: Unexpected token: operator (<) है।

कोई विचार? मैं jQuery कोड में उन यूनिकोड वर्णों के बारे में बेहद संदिग्ध हूं, लेकिन मुझे यकीन नहीं है कि वे कैसे साबित या अस्वीकार कर रहे हैं कि वे समस्या पैदा कर रहे हैं।

जब आप अपने रेल में एक या अधिक जावास्क्रिप्ट फ़ाइलें 3.1 application.js और //= require ... का उपयोग कर पर्यावरण में शामिल हैं, रेल सामग्री लपेट होगा:

+0

जो जेएस कंप्रेसर आप उपयोग कर रहे हैं? आपके application.js में क्या है? –

+0

प्रश्न अब इनके साथ अपडेट किया गया है। –

उत्तर

20

मैं इस सटीक एक ही समस्या थी और इसे हल, यहाँ विवरण हैं <script> ..filecontents.. </script> के साथ आपकी फ़ाइल का। आप अपनी साइट को विकास मोड में चलाकर और व्यू कर कर सत्यापित कर सकते हैं स्रोत।

समस्या विकास मोड में, है, यदि आप वास्तव में उस स्क्रिप्ट का उपयोग कर नहीं हैं, यह दिखाई दे सकते हैं ठीक काम करने के लिए। लेकिन, अनिवार्य रूप से, आपके पास <script><script> ..filecontents.. </script></script> है।

हालांकि, जब आप परिसंपत्तियों को प्रीकंपिल करने का प्रयास करते हैं, तो उस संकलन प्रक्रिया में कुछ (माफ करना - मुझे नहीं पता कि) वास्तव में "स्क्रिप्ट टोकन में" < "पर गैग करता है।

अपनी शामिल .js फ़ाइलों को दोबारा जांचें और, यदि उनमें से कोई भी <script> ... </script> द्वारा लिपटे हैं तो आसपास के टैग को हटा दें।

आपको यह देखना चाहिए कि, विकास में, यदि आप पृष्ठ स्रोत देखते हैं तो सब कुछ ठीक दिखता है। और, जब आप अपनी संपत्ति का प्रीकंपाइल करते हैं, तो त्रुटि दूर होनी चाहिए।

मैं Google की अनुशंसित Google-Analytics जावास्क्रिप्ट स्निपेट के साथ इस समस्या में भाग गया और शामिल फ़ाइल से स्क्रिप्ट रैपर को हटाने से समस्या हल हो गई।

+0

धन्यवाद, डेव को रिपोर्ट करने के लिए समय निकालने के लिए बहुत कुछ धन्यवाद। असल में इस सवाल से पूछने के बाद, इस मुद्दे ने जादुई रूप से मेरे लिए खुद को तय किया - शायद रेल के 3.2 के उन्नयन या रत्नों में से एक के कारण? हालांकि मैं आपका जवाब स्वीकार कर रहा हूं क्योंकि यह अभी भी इस मुद्दे को देखने वाले लोगों के लिए एक व्यावहारिक समाधान की तरह लगता है। –

+0

और 9 महीने बाद .... यह मेरी समस्या को हल करता है! – Ryan

+0

धन्यवाद! मैं रेलवे 3.2 में इस पर आया था। सुपर सहायक! – EricC

0

मुझे एक ही समस्या थी।

भले ही मेरे पास जावास्क्रिप्ट फ़ाइलों में <script> टैग नहीं था, डेव के सुझाव ने मुझे बहुत मदद की!

मैं एक बाहरी lib पर एक टिप्पणी को पहचानना मैं अपने application.js में लोड हो रहा है था सक्षम था:

<!-- Hotjar Tracking Code for (...) ->

एकल टिप्पणी मेरी uglifier संपीड़न तोड़ने गया था कि और यह मेरे लिए यह पता लगाने के लिए एक लंबे समय ले लिया और यहां तक ​​कि शायद यह भी लगता है कि यह अपराधी था।

तो, जेएस फ़ाइलों की शुरुआत में टिप्पणियों के लिए देखें, आपके संपीड़न को तोड़ सकता है।

+0

यदि आप अपनी जावास्क्रिप्ट में टिप्पणियां रखना चाहते हैं, तो '/ * */'या' // ' – meagar

+0

टिप के लिए धन्यवाद। यह 'हॉटजर' एम्बेडेड कोड से आया था, जिसे कुछ देव ने हॉटजर जोड़ते समय कॉपी किया था। – lucasarruda

5

यहां बताया गया है कि मैंने इसे कैसे डिबग किया।

स्थानीय स्तर पर, पता लगाने के लिए जहां यह chokes (स्क्रिप्ट ठीक पहले चोकिंग फ़ाइल आप को देखने के लिए चाहता हूँ है) इस

RAILS_ENV=production bundle exec rake assets:precompile

प्रयास करें चलाते हैं। सभी आवश्यकतानुसार देखो।

मेरे मामले में, मेरे पास एक फ़ाइल थी जो .js में समाप्त हुई थी जब यह .jsx होनी चाहिए और यह ठीक है।

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