سؤال

الآن هذا القضبان 3 بيتا خارج، اعتقدت أنني ألقي نظرة على إعادة كتابة التطبيق لقد بدأت للتو العمل في القضبان 3 بيتا، كلاهما للحصول على شعور به والحصول على القليل من بداية الرأس. يستخدم التطبيق Mongodb و Mongomapper لجميع نماذجها وبالتالي لا حاجة إلى Activerecord. في الإصدار السابق، أنا تفريغ 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 كما اقترح، ولكن بقدر ما أستطيع أن أرى، لا يوجد دليل هنا حول كيفية إجراء تفريغ. السبب في أنني بحاجة إلى القيام بذلك هو أنه ليس هو سخيف فقط لتحميل شيء لا أريده، لكنه يشكو من عدم قدرته على إجراء اتصال DB حتى عندما أحاول تشغيل مولد لتحضير وحدة تحكم. هذا لأنني تممس database.yml واستبدلها بتفاصيل اتصال MongoDB من أجل الاستخدام هذا GIST. لاستخدام قاعدة البيانات. تفاصيل اتصال MongoDB. لست متأكدا لماذا يجب أن تكون قادرا على بدء اتصال DB على الإطلاق فقط لإنشاء وحدة تحكم على أي حال ....

هل أي شخص يدرك القضبان الصحيحة 3 طريقة للقيام بذلك؟

هل كانت مفيدة؟

المحلول

انا ذاهب من خلال قراءة المصدر، لذلك اسمحوا لي أن أعرف إذا كان يعمل بالفعل. :)

ال rails الأوامر التي تنشئ قالب التطبيق لديها الآن خيار -O, ، والتي تحكي أن تخطي activerecord.

إذا كنت لا تشعر بالراحة rails, ، يجب عليك التحقق من ما يلي في التطبيق الحالي الخاص بك:

  • تحقق من ذلك config/application.rb لا يملك require 'rails/all' أو require "active_record/railtie". وبعد بدلا من ذلك، لإعداد القضبان القياسية دون activerecord، يجب أن يكون فقط يتطلب ما يلي:

    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_record. وبعد يمكنك ضبط هذا صراحة nil, ، إذا كنت تريد، ولكن هذا يجب أن يكون الافتراضي عندما g.orm تم حذفها تماما.

  • اختياري، ولكن في الخاص بك Gemfile, ، مسح ال gem خط يحمل الوحدة النمطية لقاعدة البيانات الخاصة بك. هذا يمكن أن يكون الخط gem "mysql" علي سبيل المثال.

نصائح أخرى

القضبان 4.

كنت أبحث عن كيفية تعطيلها في القضبان 4 ووجدت فقط هذه الإجابة التي لم تعد تعمل في القضبان 4. لذلك فهذه هي الطريقة التي يمكنك القيام بها في القضبان 4 (تم اختبارها في RC1).

في مشروع جديد

rails new YourProject --skip-active-record

في مشروع موجود

  • في Gemfile الخاص بك، قم بإزالة جوهرة برنامج تشغيل قاعدة البيانات، على سبيل المثال gem 'sqlite3' أو gem 'pg'.
  • في التكوين / Application.rb، استبدال require 'rails/all' مع

    require "action_controller/railtie"
    require "action_mailer/railtie"
    require "sprockets/railtie"
    require "rails/test_unit/railtie"
    

  • في التكوين / البيئات / Development.rb، إزالة أو تعليق config.active_record.migration_error = :page_load

  • يحتمل أن يكون لديك لإزالة مساعدين Active_record من Spec_Helper (عبر السم في التعليقات)

  • يحتمل أن تكون لديك لإزالة الاتصال الوسيطة (يبدو أن الحال مع يونيكورن): config.app_middleware.delete "ActiveRecord::ConnectionAdapters::ConnectionManagement" (عبر https://stackoverflow.com/a/18087332/764342.)

آمل أن يساعد ذلك الآخرين في البحث عن كيفية تعطيل activerecord في القضبان 4.

للحصول على تطبيق قضبان جديد، يمكنك استبعاد السجل النشط عن طريق تحديد المعلمة -skip-active المعلمة. على سبيل المثال:

rails new appname --skip-active-record

إذا قمت بإنشاء مشروع جديد باستخدام القضبان 3.2، فستحتاج أيضا إلى التعليق:

config.active_record.mass_assignment_sanitizer = :strict

و

config.active_record.auto_explain_threshold_in_seconds = 0.5

في الخاص بك Development.rb. ملف.

كل ما سبق صحيح. الشيء الآخر الذي اضطررت للقيام به في القضبان 3.1 هو التعليق

config.active_record.identity_map = true

في config/application.rb.

إذا كنت تقوم بتشغيل 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

أيضا تعليق خارج

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

(لاحظت في القضبان 3.2.13)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top