القضبان تبعيات المشكلة عند وضع الإنتاج
-
23-08-2019 - |
سؤال
أنا أعمل في قاعدة بيانات Oracle Legacy مع اتفاقية تسمية جدول غريبة قليلا حيث يتم بادئ كل اسم عمود مع الجداول الأحرف الأولية - مثل السياسة. poli_id.
لجعل قاعدة البيانات هذه أسهل في العمل مع لدي طريقة SET_Column_PREFIX التي تنشئ مسافات لكل عمود مع إزالتها بادئة. بمعنى آخر:
# Taken from wiki.rubyonrails.org/rails/pages/howtouselegacyschemas
class << ActiveRecord::Base
def set_column_prefix(prefix)
column_names.each do |name|
next if name == primary_key
if name[/#{prefix}(.*)/e]
a = $1
define_method(a.to_sym) do
read_attribute(name)
end
define_method("#{a}=".to_sym) do |value|
write_attribute(name, value)
end
define_method("#{a}?".to_sym) do
self.send("#{name}?".to_sym)
end
end
end
end
end
هذا في ملف (INSOST.RB) في LIB / Directory الخاص بي، وهو مطلوب من التكوين / البيئة ..
هذا يعمل بشكل جيد في التنمية، ولكن عندما أحاول تشغيل التطبيق في وضع الإنتاج، أحصل على الخطأ التالي في جميع النماذج الخاصة بي:
dgs@dgs-laptop:~/code/voyager$ RAILS_ENV=production script/server
=> Booting Mongrel
=> Rails 2.3.2 application starting on http://0.0.0.0:3000
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/base.rb:1964:in `method_missing':
undefined method `set_column_prefix' for #<Class:0xb3fb81d8> (NoMethodError)
from /home/dgs/code/voyager/app/models/agent.rb:16
يتم تشغيل هذا الخطأ بواسطة "CONFIG.CASHE_CLASSES = صحيح" في التكوين / البيئات / الإنتاج. إذا قمت بتعيين هذا ل خاطئة, ، سيتم بدء القضبان، ولكن لن تكون دروس التخزين المؤقت. أنا أظن أن هذا يجعل القضبان ذاكرة التخزين المؤقت لجميع النماذج قبل تشغيل كتلة تهيئة
إذا قمت بنقل "طلب" INSOST.RB "" قبل بدء القضبان :: Bliticizer.Run Block، ثم أحصل على أخطاء لأن Activerecord لم تتم تهيئته بعد:
usr/lib/ruby/gems/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:443:in `load_missing_constant': uninitialized constant ActiveRecord (NameError)
from /usr/lib/ruby/gems/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:80:in `const_missing'
from /usr/lib/ruby/gems/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:92:in `const_missing'
from /home/dgs/code/voyager/lib/insoft.rb:1
من أين يجب أن أكون في هذه الطريقة المخصصة ل LIB و SET_Column_PREFIX من أجل التقاطها قبل التخزين المؤقت النماذج، ولكن بعد تحميل ملفات activerecord؟
هتافات
ديف سميلي
المحلول
من أين يجب أن أكون في هذه الطريقة المخصصة ل LIB و SET_Column_PREFIX من أجل التقاطها قبل التخزين المؤقت النماذج، ولكن بعد تحميل ملفات activerecord؟
حاول إعداد تهيئة. وبعد يمكنك استدعاء IT CONFIG / INVICIZERS / INSOST.RB مع محتويات القرد الخاص بك:
class << ActiveRecord::Base
def set_column_prefix(prefix)
column_names.each do |name|
next if name == primary_key
if name[/#{prefix}(.*)/e]
a = $1
define_method(a.to_sym) do
read_attribute(name)
end
define_method("#{a}=".to_sym) do |value|
write_attribute(name, value)
end
define_method("#{a}?".to_sym) do
self.send("#{name}?".to_sym)
end
end
end
end
end