0

我们使用Sinatra为我们的服务提供HTTP API访问,而大多数面向用户的功能使用Rails 2.3.8。 Sinatra和Rails应用程序共享相同的ActiveRecord模型,在RAILS_ROOT/app/models目录中定义。在Sinatra应用程序中使用Rails应用程序中的ActiveRecord模型会产生多个警告

在为西纳特拉应用程序的安装脚本,所有的模型使用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 ::依赖的自动加载模式,或者是有上面的设置脚本中的其他内容可能会导致此行为?

回答

0

这种警告表明您使用的库与ruby 1.9+不完全兼容。

根据我的经验,只要产生这些结果的库不可能重新初始化,这些警告就不会对程序结果产生任何影响。

但是,应该有更新,至少对于activerecord和activesupport(到3.0.6)。

相关问题