ActiveRecord को रेल 3 में निकालें


99

अब जब रेल 3 बीटा बाहर हो गया है, तो मैंने सोचा कि मैं एक ऐप को फिर से लिखना चाहूंगा, मैंने अभी रेल 3 बीटा पर काम शुरू किया है, दोनों ही इसके लिए एक अनुभव प्राप्त करते हैं और थोड़ा सिर शुरू करते हैं। ऐप अपने सभी मॉडलों के लिए MongoDB और MongoMapper का उपयोग करता है और इसलिए उसे ActiveRecord की कोई आवश्यकता नहीं है। पिछले संस्करण में, मैं निम्नलिखित तरीके से एक्टिवरकॉर्ड उतार रहा हूं:

config.frameworks -= [ :active_record ]    # inside environment.rb

नवीनतम संस्करण में यह काम नहीं करता है - यह सिर्फ एक त्रुटि फेंकता है:

/Library/Ruby/Gems/1.8/gems/railties-3.0.0.beta/lib/rails/configuration.rb:126:in
  `frameworks': config.frameworks in no longer supported. See the generated 
  config/boot.rb for steps on how to limit the frameworks that will be loaded 
  (RuntimeError)
 from *snip*

बेशक, मैंने boot.rb को देखा है जैसा कि उसने सुझाव दिया था, लेकिन जहां तक ​​मैं देख सकता हूं, यहां कोई सुराग नहीं है कि मैं एआर को उतारने के बारे में कैसे जा सकता हूं। इसका कारण मुझे यह करने की आवश्यकता है क्योंकि न केवल यह मूर्खतापूर्ण है कि मैं जो कुछ नहीं चाहता उसे लोड कर रहा हूं, लेकिन यह एक नियंत्रक के लिए एक जनरेटर चलाने की कोशिश करने पर भी डीबी कनेक्शन बनाने में असमर्थता के बारे में शिकायत कर रहा है। ऐसा इसलिए है क्योंकि मैंने पोंछ लिया है database.ymlऔर इसे MongoDB के लिए कनेक्शन विवरण के साथ बदल दिया है ताकि MongoDB कनेक्शन विवरण के लिए database.yml का उपयोग करने के लिए इस gist का उपयोग किया जा सके। यह सुनिश्चित करने की आवश्यकता नहीं है कि किसी भी तरह एक नियंत्रक उत्पन्न करने के लिए सभी पर एक DB कनेक्शन शुरू करने में सक्षम होने की आवश्यकता क्यों है ...।

क्या किसी को भी ऐसा करने के 3 सही तरीके के बारे में पता है?

जवाबों:


155

मैं इसे स्रोत पढ़ने से जा रहा हूं, इसलिए मुझे बताएं कि क्या यह वास्तव में काम करता है। :)

railsआदेश है कि अब आवेदन टेम्पलेट उत्पन्न करता है एक विकल्प होता है -O, जो बताता है कि यह ActiveRecord छोड़।

यदि आपको फिर से railsचलना पसंद नहीं है , तो आपको अपने मौजूदा ऐप में निम्नलिखित की जांच करनी चाहिए:

  • जांचें कि आपके पास या config/application.rb नहीं है । इसके बजाय, ActiveRecord के बिना एक मानक रेल सेटअप के लिए, इसमें केवल निम्न आवश्यकताएं होनी चाहिए:require 'rails/all'require "active_record/railtie"

    require File.expand_path('../boot', __FILE__)
    
    require "action_controller/railtie"
    require "action_mailer/railtie"
    require "active_resource/railtie"
    require "rails/test_unit/railtie"
    require "sprockets/railtie"
    
    # Auto-require default libraries and those for the current Rails environment. 
    Bundler.require :default, Rails.env
  • यदि, config/application.rbआप config.generatorsअनुभाग का उपयोग कर रहे हैं , तो सुनिश्चित करें कि इसमें पंक्ति नहीं है g.orm :active_recordnilयदि आप चाहें, तो आप इसे स्पष्ट रूप से सेट कर सकते हैं, लेकिन g.ormपूरी तरह से छोड़े जाने पर यह डिफ़ॉल्ट होना चाहिए ।

  • वैकल्पिक, लेकिन आप में Gemfile, gemआपके डेटाबेस के लिए मॉड्यूल को लोड करने वाली रेखा को हटा दें । यह gem "mysql"उदाहरण के लिए रेखा हो सकती है ।


3
हाँ, ऐसा लगता है कि यह किया है। ऐसा प्रतीत होता है -O विकल्प को '--skip-activerecord' के रूप में भी लागू किया जा सकता है। मैंने इस विकल्प के साथ एक और (अस्थायी) ऐप के लिए रेल कमांड को चलाया और इसने एक नया ऐप टेम्प्लेट उत्पन्न किया, जो आपने ऊपर लिखा है। इसलिए मैं अपने वास्तविक ऐप पर इन परिवर्तनों को कॉपी और पेस्ट कर सकता हूं। धन्यवाद - अच्छा लग रहा है :)
मार्क

1
उत्कृष्ट - Theskip-activerecord के लिए धन्यवाद। बस यही मेरी जरूरत थी।
फिंगलास

यह सबसे अधिक भाग के लिए काम करता है, सिवाय इसके जब मैं रेल उत्पन्न करता हूं - मैं अभी भी वहां ActiveRecord सामान देखता हूं - मैं इसे कैसे निकालूं?
हैकरन

8
रेल 3.1 में आपको require "sprockets/railtie"अपनी application.rbफ़ाइल में भी होना चाहिए ।
erskingardner

1
बस इस उत्तर और मेरी पिछली टिप्पणी में एक त्वरित अद्यतन जोड़ने के लिए ... रेल 3.1 में, यह अब है --skip-active-record। अतिरिक्त पानी का छींटा नोटिस करें।
मार्क एम्बलिंग

46

रेलें ४

मैं देख रहा था कि इसे रेल 4 में कैसे निष्क्रिय किया जाए और केवल यही उत्तर मिला जो अब रेल 4 में काम नहीं करता है। तो यह है कि आप इसे रेल 4 में कैसे कर सकते हैं (आरसी 1 में परीक्षण किया गया)।

एक नए प्रोजेक्ट में

rails new YourProject --skip-active-record

किसी मौजूदा प्रोजेक्ट में

  • अपने Gemfile में, डेटाबेस ड्राइवर मणि निकालें, जैसे gem 'sqlite3'या gem 'pg'
  • Config / application.rb में, की जगह require 'rails/all'के साथ

    "एक्शन_कंट्रोलर / रेलटी" की आवश्यकता है
    "एक्शन_मेलर / रेलटी" की आवश्यकता है
    "स्प्रोकेट / रेलटी" की आवश्यकता है
    "रेल / test_unit / Railtie" की आवश्यकता है
    

  • विन्यास / वातावरण / विकास.बीआर में, हटाएं या टिप्पणी करें config.active_record.migration_error = :page_load

  • संभावित रूप से आपको active_record सहायकों को spec_helper (टिप्पणियों में VenoM के माध्यम से) से निकालना होगा

  • संभावित रूप से आपको कनेक्शन प्रबंधन मिडलवेयर (गेंडा के साथ ऐसा प्रतीत होता है) निकालना होगा: config.app_middleware.delete "ActiveRecord::ConnectionAdapters::ConnectionManagement"( https://stackoverflow.com/a/18087332/764342 के माध्यम से )

मुझे उम्मीद है कि यह दूसरों को रेल 4 में ActiveRecord को निष्क्रिय करने की तलाश में मदद करता है।


3
धन्यवाद! फिर भी आपको spec_helper से active_record सहायकों को निकालने की आवश्यकता है (अनिवार्य नहीं है, लेकिन यदि आप चश्मा चला रहे हैं)। रिमियन की अंतिम टिप्पणी देखें।
वेनोम

मेरी मदद की, धन्यवाद! नीचे दी गई टिप्पणियों के अनुसार, अनुप्रयोग में टिप्पणी करने के लिए अन्य विन्यास घोषणाएं हो सकती हैं। और / या वातावरण / {env} .rb फाइलें। YMMV।
नाथन स्मिथ

activerecord अभी भी gemfile.lock में रहता है ... क्या हम इसके खिलाफ कुछ कर सकते हैं?
बॉटि

@ कोई भी अनहोनी। यह रेल का हिस्सा है। इसे अपने .lock से हटाने के लिए मुझे लगता है कि आपको रेल पर निर्भरता को दूर करना होगा और सभी व्यक्तिगत घटकों पर निर्भर रहना होगा। निर्भरता की सूची के लिए रत्नप्रकाश देखें - आप सब कुछ पर निर्भर करना चाहते हैं लेकिन एक्टिवरकॉर्ड। github.com/rails/rails/blob/master/rails.gemspec
जॉन हेननेगन

मुझे लगता है कि यह परिवर्तन करने के बाद i18n संबंधित समस्या में चल रहा है: lib / active_support / i18n.rb: 13: में `<टॉप (आवश्यक)> ': अनइंस्टाल्यूटेड निरंतर I18n (NameError)। कोई विचार?
माइकल पेल

36

एक नई रेल ऐप के लिए, आप --skip-active-record पैरामीटर निर्दिष्ट करके सक्रिय रिकॉर्ड को बाहर कर सकते हैं। उदाहरण के लिए:

rails new appname --skip-active-record

मैंने ऐसा किया और मेरे वर्तमान ऐप में सामान को खोजने और हटाने के लिए कुछ अलग-अलग भाग किए जो ActiveRecord का उपयोग कर रहा था
कीथ स्माइली

15

यदि आपने रेल 3.2 का उपयोग करके एक नया प्रोजेक्ट बनाया है, तो आपको टिप्पणी करने की भी आवश्यकता होगी:

config.active_record.mass_assignment_sanitizer = :strict

तथा

config.active_record.auto_explain_threshold_in_seconds = 0.5

अपने विकास में।आरबी फ़ाइल।


6

सत्य सर्वोपरि है। एक और बात जो मुझे रेल 3.1 में करनी थी वह है बाहर टिप्पणी करना

config.active_record.identity_map = true

में है config/application.rb


2

यदि आप rspec चला रहे हैं, तो आपको भी निकालने की जरूरत है (spec_helper में):

  # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
  config.fixture_path = "#{::Rails.root}/spec/fixtures"

और हटा दें

  # If you're not using ActiveRecord, or you'd prefer not to run each of your
  # examples within a transaction, remove the following line or assign false
  # instead of true.
  config.use_transactional_fixtures = true

1

इसके अलावा टिप्पणी बाहर

# config/application.rb    
config.active_record.whitelist_attributes = true

(3.2.13 रेल पर ध्यान दिया गया)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.