在Sinatra应用程序中加载Rails模型时出现'require'问题

时间:2013-02-04 19:54:00

标签: ruby-on-rails sinatra

我根据我在上面找到的一个示例,使用以下代码将我的acme应用程序中的rails模型嵌入(或者至少我认为我已经嵌入)我的Sinatra应用程序中某人的博客。 rails应用程序位于/Users/chris/acme,Sinatra应用程序位于/Users/chris/acme/services/sinatra/sinatra.rb

RAILS_ROOT = '../..'
LIB_DIR = "#{RAILS_ROOT}/lib"
MODELS_DIR = "#{RAILS_ROOT}/app/models"

require 'active_support/dependencies'
ActiveSupport::Dependencies.autoload_paths += Dir["#{LIB_DIR}/**/"]
ActiveSupport::Dependencies.autoload_paths += Dir["#{MODELS_DIR}/"]

require 'active_support/all'
require 'active_record'
::ActiveRecord::Base.establish_connection(
    YAML.load(File.read(
    File.expand_path('config/database.yml', RAILS_ROOT)))["development"])

require 'sinatra'

get '/user' do
  "#{User.first.id}"
end

当我访问http://localhost:4567/user时,我收到以下错误:

LoadError - no such file to load -- util/versioning:
/Users/chris/.rvm/gems/ruby-1.9.2-p320@acme/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:242:in `require'
/Users/chris/.rvm/gems/ruby-1.9.2-p320@acme/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:242:in `block in require'
/Users/chris/.rvm/gems/ruby-1.9.2-p320@acme/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:225:in `block in load_dependency'
/Users/chris/.rvm/gems/ruby-1.9.2-p320@acme/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:597:in `new_constants_in'
/Users/chris/.rvm/gems/ruby-1.9.2-p320@acme/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:225:in `load_dependency'
/Users/chris/.rvm/gems/ruby-1.9.2-p320@acme/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:242:in `require'
/Users/chris/acme/app/models/user.rb:2:in `<top (required)>'

user.rb的第2行是require 'util/versioning',这应该是自动加载的,但不是。

如果我将user.rb的第2行更改为require '/Users/chris/acme/lib/util/versioning',那么一切都会开始有效,但是必须有更好的方法,对吗?

2 个答案:

答案 0 :(得分:1)

您是否尝试使用RAILS_ROOT的绝对路径?像

RAILS_ROOT = '/Users/chris/acme'

答案 1 :(得分:0)

我从require 'util/versioning'移除了user.rb,现在它正常运行,包括从Util.Versioning内拨打user.rb。这适用于相对或绝对RAILS_ROOT。我想我似乎误解了如何正确使用require因为我不确定为什么我需要一个我肯定在{{1}中使用的库}。