إزالة activerecord في القضبان 3
-
19-09-2019 - |
سؤال
الآن هذا القضبان 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)