Rails 3'te ActiveRecord'u Kaldırma


99

Artık Rails 3 beta çıktığı için, Rails 3 beta sürümünde çalışmaya başladığım bir uygulamayı yeniden yazmaya bir göz atmam gerektiğini düşündüm, hem bir fikir edinmek hem de biraz avantaj sağlamak için. Uygulama, tüm modelleri için MongoDB ve MongoMapper kullanır ve bu nedenle ActiveRecord'a ihtiyaç duymaz. Önceki sürümde, aktivasyon kaydını şu şekilde kaldırıyorum:

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

En son sürümde bu çalışmıyor - sadece bir hata veriyor:

/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*

Elbette, önerdiği gibi boot.rb'ye baktım, ancak görebildiğim kadarıyla, burada AR'yi nasıl boşaltabileceğime dair hiçbir ipucu yok. Bunu yapmamın nedeni, istemediğim bir şeyi yüklemenin aptalca olması değil, aynı zamanda bir denetleyici için bir jeneratör çalıştırmayı denediğimde bile bir DB bağlantısı yapamamasından şikayet ediyor olmasıdır. Bunun nedeni database.yml, MongoDB bağlantı ayrıntıları için database.yml'yi kullanmak için bu özü kullanmak üzere MongoDB için bağlantı ayrıntılarını sildim ve değiştirdim . Yine de bir denetleyici oluşturmak için neden bir DB bağlantısı başlatması gerektiğinden emin değilim ...

Bunu yapmanın doğru Rails 3 yolunun farkında olan var mı?

Yanıtlar:


155

Bunu kaynağı okuyarak yapıyorum, bu yüzden gerçekten işe yarayıp yaramadığını bana bildirin. :)

railsŞimdi uygulama şablonu oluşturur komut bir seçenek vardır -Oo ActiveRecord atlamak söyler.

Yeniden çalıştırmak railsistemiyorsanız, mevcut uygulamanızda aşağıdakileri kontrol etmelisiniz:

  • Senin olmadığını kontrol config/application.rb etmez var require 'rails/all'ya require "active_record/railtie". Bunun yerine, ActiveRecord olmadan standart bir Rails kurulumu için yalnızca aşağıdakileri gerektirmelidir:

    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
  • Eğer, içinde bölümü config/application.rbkullanıyorsanız config.generators, satırın olmadığından emin olun g.orm :active_record. İsterseniz bunu açıkça olarak ayarlayabilirsiniz nil, ancak bu g.ormtamamen atlandığında varsayılan olmalıdır .

  • İsteğe bağlı, ancak sizin veritabanınızda modülü yükleyen satırı Gemfilekaldırın gem. Bu, gem "mysql"örneğin satır olabilir .


3
Evet, bunu yapmış gibi görünüyor. Görünüşe göre -O seçeneği '--skip-activerecord' olarak da çağrılabilir. Bu seçenekle başka bir (geçici) uygulama için rails komutunu çalıştırdım ve yukarıda yazdıklarınızla tam olarak eşleşen yeni bir uygulama şablonu oluşturdu. Bu değişiklikleri kopyalayıp gerçek uygulamama yapıştırabilirim. Teşekkürler - güzel bul :)
Mark Embling

1
Mükemmel - --skip-activerecord için teşekkürler. İşte ihtiyacım olan buydu.
Finglas

Çoğunlukla işe yarıyor, ray oluşturmayı çalıştırdığım zamanlar hariç - hala orada ActiveRecord şeyler görüyorum - nasıl kaldırırım?
Hackeron

8
Raylar 3.1 aylarında da olması gerekir require "sprockets/railtie"senin içinde application.rbdosyanın.
erskingardner

1
Sadece bu yanıta ve önceki yorumuma hızlı bir güncelleme eklemek için ... Rails 3.1'de şimdi öyle --skip-active-record. Ekstra çizgiye dikkat edin.
Mark Embling

46

Raylar 4

Raylar 4'te nasıl devre dışı bırakılacağını arıyordum ve yalnızca artık raylarda 4 çalışmayan bu yanıtı buldum. Yani bunu 4 numaralı raylarda (RC1'de test edildi) böyle yapabilirsiniz.

Yeni bir projede

rails new YourProject --skip-active-record

Mevcut bir projede

  • Gemfile'ınızda, veritabanı sürücüsü mücevherini kaldırın, örn. gem 'sqlite3'Veya gem 'pg'.
  • Config / application.rb içinde require 'rails/all'şununla değiştirin:

    "action_controller / railtie" gerektir
    "action_mailer / railtie" gerektir
    "zincir dişlileri / parmaklıklar" gerektirir
    "rails / test_unit / railtie" gerektir
    

  • Config / environment / development.rb'de kaldırın veya açıklama ekleyin config.active_record.migration_error = :page_load

  • Potansiyel olarak active_record yardımcılarını spec_helper'dan kaldırmanız gerekir (yorumlarda VenoM aracılığıyla)

  • Potansiyel olarak ConnectionManagement ara yazılımını kaldırmanız gerekir (tek boynuzlu at için geçerli gibi görünüyor): config.app_middleware.delete "ActiveRecord::ConnectionAdapters::ConnectionManagement"( https://stackoverflow.com/a/18087332/764342 aracılığıyla )

Umarım bu, Rails 4'te ActiveRecord'u nasıl devre dışı bırakacaklarını arayanlara yardımcı olur.


3
Teşekkürler! Yine de active_record yardımcılarını spec_helper'dan kaldırmanız gerekir (Zorunlu değil, ancak spesifikasyonları çalıştırıyorsanız). Rimian'ın son yorumuna bakın.
VenoM

Bana yardım etti, teşekkürler! Aşağıdaki yorumlara göre, application.rb ve / veya environment / {env} .rb dosyalarında yorum yapılacak başka yapılandırma bildirimleri olabilir. YMMV.
Nathan Smith

activerecord hala gemfile.lock'ta kalıyor ... Buna karşı bir şey yapabilir miyiz?
Boti

@Boti Muhtemel. Rayların bir parçası. Onu .lock'unuzdan kaldırmak için raylara olan bağımlılığı ortadan kaldırmanız ve tüm bileşenlere bağlı olmanız gerektiğini düşünüyorum. Bağımlılıklar listesi için gemspec'e bakın - aktif kayıt dışında her şeye bağlı olmak istersiniz. github.com/rails/rails/blob/master/rails.gemspec
John Hinnegan

Bu değişikliği yaptıktan sonra i18n ile ilgili bir sorunla karşılaşıyorum gibi görünüyor: lib / active_support / i18n.rb: 13: "<top (gerekli)> '': başlatılmamış sabit I18n (NameError). Herhangi bir fikir?
Michael Pell

36

Yeni bir rails uygulaması için --skip-active-record parametresini belirterek uygulamanın aktif kaydı hariç tutmasını sağlayabilirsiniz. Örneğin:

rails new appname --skip-active-record

Bunu yaptım ve mevcut uygulamamda ActiveRecord kullanan şeyleri bulmak ve kaldırmak için birkaç fark çalıştırdım
Keith Smiley

15

Rails 3.2 kullanarak yeni bir proje oluşturduysanız, ayrıca yorum yapmanız gerekir:

config.active_record.mass_assignment_sanitizer = :strict

ve

config.active_record.auto_explain_threshold_in_seconds = 0.5

sizin de development.rb dosyası.


6

Yukarıdakilerin tümü doğrudur. Raylar 3.1'de yapmam gereken bir şey daha yorum yapmaktır

config.active_record.identity_map = true

içinde config/application.rb.


2

Rspec çalıştırıyorsanız, şunu da kaldırmanız gerekir (spec_helper içinde):

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

ve kaldır

  # 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

Ayrıca yorum dışarı

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

(raylarda belirtilmiştir 3.2.13)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.