سؤال

أقوم بإجراء اختبارات الوحدة على Rails 2.3 وأظل أتلقى أخطاء على هذا المنوال عندما أقوم بالتشغيل rake test:units:

10) Error:
test_the_truth(BrokerTest):
ActiveRecord::StatementInvalid: Mysql::Error: Table 'shadow_test.users' doesn't exist: DELETE FROM `users`
    /Library/Ruby/Gems/1.8/gems/after_commit-1.0.10/lib/after_commit/connection_adapters.rb:14:in `transaction'

ركضت rake db:test:load قبل ذلك، وقام بإنشاء الجداول.ومع ذلك، عندما أتحقق mysql بعد تشغيل أمر اختبارات الوحدة، أصبحت الجداول مفقودة بالفعل.هناك شيء ما أثناء التحضير لاختبارات الوحدة يتسبب في اختفاء الجداول.إليك سجل التصحيح من تشغيل الاختبار:

WARNING: 'task :t, arg, :needs => [deps]' is deprecated.  Please use 'task :t, [args] => [deps]' instead.
    at /Users/me/sources/shadow/lib/tasks/turk.rake:53
** Invoke test:units (first_time)
** Invoke db:test:prepare (first_time)
** Invoke db:abort_if_pending_migrations (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:abort_if_pending_migrations
** Execute db:test:prepare
** Invoke db:test:load (first_time)
** Invoke db:test:purge (first_time)
** Invoke environment 
** Execute db:test:purge
** Execute db:test:load
** Invoke db:schema:load (first_time)
** Invoke environment 
** Execute db:schema:load
** Execute test:units
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby -I"lib:test" -I"/Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib" "/Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib/rake/rake_test_loader.rb" "test/unit/**/*_test.rb" 
/Library/Ruby/Gems/1.8/gems/bundler-1.1.3/lib/bundler/runtime.rb:211: warning: Insecure world writable dir /usr/local/git/bin in PATH, mode 040777
NOTE: Gem.source_index is deprecated, use Specification. It will be removed on or after 2011-11-01.
Gem.source_index called from /Library/Ruby/Gems/1.8/gems/rails-2.3.14/lib/rails/gem_dependency.rb:21.
WARNING: using the built-in Timeout class which is known to have issues when used for opening connections. Install the SystemTimer gem if you want to make sure the Redis client will not hang.
/Users/me/sources/shadow/test/unit/../test_helper.rb:36: warning: already initialized constant BEANSTALK
Loaded suite /Library/Ruby/Gems/1.8/gems/rake-0.9.2.2/lib/rake/rake_test_loader
Started
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
Finished in 3.389328 seconds.

المزيد من الخلفية:أنا أستخدم الأخطبوط للتقطيع وقد يتداخل ذلك بطريقة ما مع الأشياء؟؟

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

المحلول

باستخدام Octopus تحتوي جوهرة مشاركة قاعدة البيانات على بعض المشكلات المتعلقة بإعداد حالة الاختبار.راجع مشكلة جيثب: https://github.com/tchandy/octopus/issues/31.

لديك عدة خيارات، أسهلها هو التعطيل Octopus لبيئة التطوير الخاصة بك.قم بإزالة "- التطوير" من ملفك shards.yml ملف.

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

 task :reconnect_octopus do
   if ActiveRecord::Base.connection.is_a?(Octopus::Proxy)
     ActiveRecord::Base.connection.initialize_shards(Octopus.config)
   end
 end
 task :'db:test:clone_structure' => :reconnect_octopus

أو للقضبان 3:

 task :reconnect_octopus do
   if ActiveRecord::Base.connection.is_a?(Octopus::Proxy)
     ActiveRecord::Base.connection.initialize_shards(Octopus.config)
   end
 end
 task :'db:structure:load' => :reconnect_octopus

يجب أن يؤدي هذا إلى إيقاف مشكلتك المذكورة أعلاه.ترميز سعيد!

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