Использование моделей ActiveRecord из приложения Rails в приложении Sinatra выдает несколько предупреждений - PullRequest
0 голосов
/ 16 марта 2011

Мы используем Sinatra для предоставления доступа HTTP API к нашему сервису, в то время как большинство пользовательских функций использует Rails 2.3.8.И приложение Sinatra, и приложение Rails используют одни и те же модели ActiveRecord, определенные в каталоге RAILS_ROOT / app / models.

В сценарии установки для приложения Sinatra все модели загружаются с использованием ActiveSupport::Dependencies иИнициализировано соединение с базой данных:

require 'active_support'
relative_load_paths = %w(app/models)
::ActiveSupport::Dependencies.load_paths = relative_load_paths.map { |path|
  File.expand_path(path, RAILS_ROOT)
}

require 'active_record'
config_path     = File.expand_path('config/database.yml', RAILS_ROOT)
all_envs_config = YAML.load(File.read(config_path)) 
config          = all_envs_config[env.to_s]
::ActiveRecord::Base.establish_connection(config)

. Выше одно только не выдает никаких предупреждений, но всякий раз, когда какая-либо из наших моделей используется со стороны API (например, в тестах), на консоль будет выводиться несколько предупреждений:

/path/to/ruby/gems/activesupport-2.3.8/lib/active_support/vendor.rb:32: warning: redefine normalize_translation_keys
/path/to/ruby/gems/activerecord-2.3.8/lib/active_record/validations.rb:393: warning: `*' interpreted as argument prefix
/path/to/ruby/gems/activerecord-2.3.8/lib/active_record/validations.rb:29: warning: method redefined; discarding old message
/path/to/ruby/gems/activerecord-2.3.8/lib/active_record/dirty.rb:40: warning: `*' interpreted as argument prefix
/path/to/ruby/gems/activerecord-2.3.8/lib/active_record/callbacks.rb:228: warning: `*' interpreted as argument prefix
/path/to/ruby/gems/sinatra-1.2.0/lib/sinatra/base.rb:1096: warning: method redefined; discarding old options
/path/to/ruby/gems/shoulda-2.10.3/lib/shoulda/context.rb:4: warning: method redefined; discarding old contexts
/path/to/ruby/gems/shoulda-2.10.3/lib/shoulda/context.rb:330: warning: method redefined; discarding old subject_block
/path/to/ruby/gems/shoulda-2.10.3/lib/shoulda/proc_extensions.rb:4: warning: method redefined; discarding old bind
/path/to/ruby/gems/actionpack-2.3.8/lib/action_controller/integration.rb:99: warning: `*' interpreted as argument prefix
/path/to/ruby/gems/actionpack-2.3.8/lib/action_controller/test_process.rb:90: warning: method redefined; discarding old path
/path/to/ruby/gems/actionpack-2.3.8/lib/action_controller/test_process.rb:397: warning: method redefined; discarding old get
/path/to/ruby/gems/actionpack-2.3.8/lib/action_controller/test_process.rb:402: warning: method redefined; discarding old post
/path/to/ruby/gems/actionpack-2.3.8/lib/action_controller/test_process.rb:407: warning: method redefined; discarding old put
/path/to/ruby/gems/actionpack-2.3.8/lib/action_controller/test_process.rb:412: warning: method redefined; discarding old delete
/path/to/ruby/gems/actionpack-2.3.8/lib/action_controller/test_process.rb:417: warning: method redefined; discarding old head
/path/to/ruby/gems/activerecord-2.3.8/lib/active_record/reflection.rb:261: warning: instance variable @collection not initialized
/path/to/ruby/gems/activerecord-2.3.8/lib/active_record/reflection.rb:261: warning: instance variable @collection not initialized
/path/to/ruby/gems/activerecord-2.3.8/lib/active_record/reflection.rb:261: warning: instance variable @collection not initialized
...

Это из-за того, что мы используем ActiveSupport :: Dependencies для автоматической загрузки моделей при необходимости, или в сценарии установки есть что-то еще, что может вызывать такое поведение?

1 Ответ

0 голосов
/ 13 апреля 2011

Такого рода предупреждения указывают, что вы используете библиотеку, не полностью совместимую с ruby ​​1.9 +.

Из того, что я испытал, эти предупреждения не влияют на результаты программы, если библиотекикоторые дают эти результаты, не зависят от повторной инициализации.

Однако должны быть обновления, по крайней мере, для activerecord и activesupport (до 3.0.6).

...