Gemfile में "संपत्ति" समूह के लिए Rails4 ने समर्थन क्यों छोड़ा


99

रेल 3 में, विशेष रूप से परिसंपत्ति पाइपलाइन में संपत्ति उत्पन्न करने के लिए उपयोग किए जाने वाले रत्नों assetsको जेमफाइल के समूह में ठीक से रखा गया था :

...

# Gems used only for assets and not required
# in production environments by default.
group :assets do
  gem 'sass-rails'
  gem 'coffee-rails'
  gem 'uglifier'

  # See https://github.com/sstephenson/execjs#readme for more supported runtimes
  # gem 'therubyracer', :platforms => :ruby
end

अब, (अभी भी प्रगति में है) के अनुसार प्रलेखन का उन्नयन :

रेल 4.0 ने जेमफाइल से संपत्ति समूह को हटा दिया। अपग्रेड करते समय आपको उस लाइन को अपने जेमफाइल से निकालना होगा।

निश्चित रूप से पर्याप्त है, RC1 के साथ एक नई परियोजना बनाने से किसी भी समूह के बाहर डिफ़ॉल्ट रूप से शामिल संपत्ति-संबंधित रत्नों के साथ एक मणिफल प्राप्त होता है:

source 'https://rubygems.org'

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.0.0.rc1'

# Use sqlite3 as the database for Active Record
gem 'sqlite3'

# Use SCSS for stylesheets
gem 'sass-rails', '~> 4.0.0.rc1'

# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'

# Use CoffeeScript for .js.coffee assets and views
gem 'coffee-rails', '~> 4.0.0'

# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby

...

क्या इसका मतलब यह है कि इन रत्नों को अब डिफ़ॉल्ट रूप से उत्पादन बिल्ड में बंडल किया जाएगा? यदि हां, तो हृदय परिवर्तन क्यों? क्या रेल उत्पादन में परिसंपत्तियों की गतिशील पीढ़ी की ओर बढ़ रही है?


1
मुझे अभी भी नहीं मिला कि "परिसंपत्ति समूह" का उद्देश्य क्या था, और रेल 4 में क्या बदल गया जिसने परिसंपत्ति समूह को अनावश्यक बना दिया।
मिकेल डे मारे

23
"संपत्ति समूह" अलग-अलग लोगों के लिए अलग-अलग चीजें थीं। मैंने इसे रत्नों को रखने के लिए एक जगह के रूप में इस्तेमाल किया, जिसे मुझे उत्पादन में बंडल की आवश्यकता नहीं थी। लेकिन स्वीकार किए गए उत्तर से जुड़ी बातचीत से देखते हुए, रेल कोर में कम से कम कुछ लोगों ने इसका इस्तेमाल यह सुनिश्चित करने के लिए किया कि गैर-पूर्व-निर्मित संपत्तियां उत्पादन में 404 (चुपचाप ऑटो-जनरेट करने के बजाय) के साथ विफल हो गईं, जिससे गरीब पैदा होंगे प्रदर्शन)। क्या बदला है rails4 अब ऑटो-जनरेट नहीं करता है, इसलिए "एसेट ग्रुप" वर्कअराउंड (जैसा कि रेल कोर ने देखा) को हटा दिया गया है।
jemmons

यह अभी तक का सबसे स्पष्ट विवरण है। यदि आप इसे एक उत्तर में रखते हैं, तो इनाम आपका है।
मिकेल डे मारे

@ मिचेल्डेमेयर मुझे अपने प्रश्न के लिए एक इनाम मिलने में अजीब लगेगा;; यदि आप ऐसा महसूस करते हैं, तो आप बाउंटी को फ़िलिप गिस्टी (स्वीकृत उत्तर) दे सकते हैं क्योंकि वह मुझे समझने में मदद करने के लिए सहायक थे।
jemmons

3
भविष्य में लोगों के लिए एक चेतावनी: यदि आप रेल्स अपग्रेड गाइड की उपेक्षा करते हैं और अपने जेमफाइल में परिसंपत्ति समूह को बनाए रखते हैं, तो ध्यान रखें कि उत्पादन में संपत्ति का संकलन करते समय रेल को स्वचालित रूप से परिसंपत्ति समूह की आवश्यकता नहीं होगी। आपको या तो अपने निर्माण के वातावरण में उत्पादन को बढ़ाने के लिए कमांड से पहले खुद को करना होगा या जोड़ना होगा RAILS_GROUPS=assets(देखना Rails.groups)।
Ajedi32 17

जवाबों:


100

पहले संपत्ति समूह उत्पादन में अनपेक्षित संकलन-ऑन-डिमांड से बचने के लिए मौजूद था। जैसा कि रेल 4 अब उस तरह का व्यवहार नहीं करता है, यह संपत्ति समूह को हटाने के लिए समझ में आता है।

यह उस बदलाव के बारे में अधिक विस्तार से बताया गया है , जिसने इसे बदल दिया। मैंने वास्तविक उत्तर के साथ कुछ उद्धरण निकाले।

कुछ रत्नों की आवश्यकता (उत्पादन में) हो सकती है जैसे कॉफ़ी-रेल यदि आप कॉफ़ी टेम्प्लेट का उपयोग कर रहे हैं और यह तथ्य कि अब परिसंपत्तियाँ उत्पादन में माँग पर पूर्वनिर्धारित नहीं हैं।

(उत्पादन में मांग पर पूर्वनिर्धारित नहीं) इसका मतलब है कि यदि आपके पास 3.2.x में उत्पादन वातावरण में रत्न हैं और प्री-कम्पाइल करने के लिए भूल जाते हैं, तो रेल्स विकास में वही करती हैं, जो संपत्ति का अनुरोध किया गया था। यह रेल 4 में अब और सच नहीं है, इसलिए यदि आप उन कार्यों का उपयोग करके संपत्ति को रोकते नहीं हैं, जब आप संपत्ति का अनुरोध करते हैं तो आपको 404 मिलेगा।


32
यह भी स्मृति को बचाने नहीं था? अब सभी रत्नों, यहां तक ​​कि "उत्पादन" (केवल precompile में) की आवश्यकता नहीं है, लोड किए जाते हैं और इस प्रकार रेल अधिक मेमोरी खपत करते हैं?
गुक्की

3
+1 @ गुड्डी और लोड समय। यह समूहों के बारे में मेरी समझ थी .. क्योंकि लाइव संकलन को अक्षम करने के लिए पहले से ही एक विन्यास विकल्प था। यहाँ पर "समर्थन" राशि क्या है। afaik my Rails 3 ऐप में env / prod.rb की एक लाइन थी, जो सिर्फ विकास पर संपत्ति लोड करती थी। यदि वह सब है, तो क्या हम इसे वैसे भी जोड़ सकते हैं?
कार्तिक टी

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

13

रेल 4 तैनाती से पहले आपको अपनी संपत्ति को छीनने के लिए मजबूर करने की कोशिश करती है। आपको अपनी परिसंपत्तियों के साथ छेड़छाड़ करनी होगी

$ RAILS_ENV=production bundle exec rake assets:precompile

और क्यों? मैंने इसे गाइड में पाया:

डिफ़ॉल्ट रूप से रेल मानती है कि परिसंपत्तियाँ पूर्व निर्धारित की गई हैं और आपके वेब सर्वर द्वारा स्थिर संपत्ति के रूप में सेवा की जाएगी।

(स्रोत: http://edgeguides.rubyonrails.org/asset_pipeline.html#in-production )

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

इसलिए मुझे लगता है, इस बदलाव का कारण प्रदर्शन में सुधार है ... और साथ ही अधिक सरल दिखता है। :)


22
यह मानते हुए कि रेल संपत्ति precompiled कर दिया है के लिए एक तर्क है रखनेassets समूह, नहीं यह से छुटकारा हो रही है (यदि संपत्ति precompiled कर रहे हैं, तो इन जवाहरात उत्पादन के लिए आवश्यक नहीं कर रहे हैं और बंडलर द्वारा नहीं शामिल किया जाना चाहिए)। और हाँ, हो सकता है कि आप coffee-railsउत्पादन में एक मणि का उपयोग करें ... लेकिन यही बात रेल 3 में भी थी, है ना? और रेल 3 को डिफ़ॉल्ट रूप coffee-railsसे assetsसमूह में रखा जाता है। तो रेल 4 के लिए बदलाव क्यों?
शाम

1
आप अपने विचार निर्देशिका में js.cfish फ़ाइल का उपयोग क्यों करेंगे? यह संपत्ति / जावास्क्रिप्ट में जाना चाहिए।
मारन लाइबो-कोसर

3

हम AJAX ( इतिहास ) के साथ ताबूत चाहते हैं , इसलिए coffee-railsसंपत्ति समूह से बाहर चले जाते हैं।
sass-railsदुर्व्यवहार ( इतिहास ), इसलिए यह संपत्ति समूह से बाहर निकल जाता है।

संपत्ति समूह कुल्हाड़ी।


2
कॉफीस्क्रिप्ट विचारों में नहीं होना चाहिए। आप इसके बिना अजाक्स कर सकते हैं। अजाक्स करने के लिए आपको जेएस को गतिशील रूप से उत्पन्न करने की आवश्यकता नहीं है। वास्तव में, आपको गतिशील रूप से जेएस उत्पन्न नहीं करना चाहिए। अपनी CoffeeScript फाइलों को रोकें और पूरी तरह से समस्या से बचें।
मार्नेन लाईबो-कोसर

1
sass-rails गलत व्यवहार करता है क्योंकि Bundler.require :assetsचलाया नहीं जा रहा है। वह संपत्ति समूह को हटाने का औचित्य नहीं है। मुझे थेरैबरैसर नहीं चाहिए, libv8 et c। उत्पादन पर, कोई क्यों करता है? कॉफी टेम्पलेट को जेएस टेम्पलेट में संकलित किया जा सकता है, और हर बार एक नया मूल्य प्रतिस्थापित होने पर इसे संकलित करने का कोई मतलब नहीं है। इस बात का कोई मतलब नहीं है कि यह सब उत्पादन पर ले जाएगा।
दार पिरोझोकोव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.