我正在寻找使用ActiveResource但现在面临一个我无法弄明白的问题(现在正在网上搜索解决方案的几天)。
所以我有一个身份验证应用程序位于http://localhost:80
,一个客户端位于端口:85
我的用户模型及其控制器遵循REST架构,并设置为响应xml调用。
以下是我在auth应用中的内容:
模型/ User.rb
class User < ActiveRecord::Base
end
*控制器/ users_controller.rb *
class UsersController < ApplicationController
respond_to :html, :xml, :js
def index
@users = User.find :all
respond_with @users
end
def show
@user = User.find(params[:id])
respond_with @user
end
.
.
.
end
我有一个从活动资源扩展的类,如下所示:
模型/ user.rb
class User < ActiveResource::Base
self.site = "http://localhost:80"
end
以下是我尝试使用它的方法: *控制器/ sessions_controller.rb *
class SessionController < ApplicationController
def home
@user = User.find(:all)
end
end
什么可能出错,对吧?..
但后来我收到以下错误:
在2013-09-02 08:33:44 +1200处理中开始获取127.0.0.1的“/” 通过SessionsController#home作为HTML已完成500内部服务器错误
在3msNameError(未初始化的常量ActiveResource):
app / models / user.rb:1:in<top (required)>'
home'
app/controllers/sessions_controller.rb:4:in渲染
/usr/lib/ruby/gems/1.9.1/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_source.erb
(1.6ms)呈现 /usr/lib/ruby/gems/1.9.1/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_trace.erb
(2.7ms)呈现 /usr/lib/ruby/gems/1.9.1/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb
(2.2ms)呈现 救援/布局中的/usr/lib/ruby/gems/1.9.1/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb(37.4ms)
我正在使用:
ruby 1.9.3p0(2011-10-30修订版33570)[i686-linux]
Rails 4.0.0
安装了activeresource(4.0.0)gem
我可能做错了什么?
ActiveResource是否可能无法连接到localhost:80
,因此无法初始化?
编辑:
完成rvm使用2.0.0所以现在ruby版本是:ruby 2.0.0p247(2013-06-27修订版41674)[i686-linux]
编辑:
RubyGems环境:
- RUBYGEMS版本:2.0.7
- RUBY VERSION:1.9.3(2011-10-30 patchlevel 0)[i686-linux]
- 安装目录:/usr/lib/ruby/gems/1.9.1
- RUBY EXECUTABLE:/usr/bin/ruby1.9.1
- 可执行的目录:/ usr / bin
- RUBYGEMS PLATFORMS:
- 红宝石
- x86-linux
- 创业板路径:
- /usr/lib/ruby/gems/1.9.1
- /home/dmitry/.gem/ruby/1.9.1
- 创业板配置:
- :update_sources =&gt;真正
- :verbose =&gt;真正
- :backtrace =&gt;假
- :bulk_threshold =&gt; 1000
- 远程来源:
- https://rubygems.org/
答案 0 :(得分:17)
我终于弄清楚了......
出于某种原因(如果有人可以发布解释原因,我将不胜感激)我不得不在我的user.rb文件中手动要求活动资源。
使其正常运行的正确代码应为:
require 'active_resource'
class User < ActiveResource::Base
self.site = "http://localhost:80"
end
P.S
感谢您zeantsoi的评论,这些已经让我搜索了这个宝石没有被加载的原因。
答案 1 :(得分:16)
在Gemfile
中添加activeresource gem,如下所示:
gem 'activeresource', require: 'active_resource'
这将使其表现得如此 - 无需在每个activeresource模型的开头都需要它。
答案 2 :(得分:10)
ActiveResource
应加载到config/application.rb
文件中:
# config/application.rb
# Pick the frameworks you want:
require 'active_resource/railtie'
require "action_controller/railtie"
...
在这种情况下,您可以稍后在同一文件中配置ActiveResource
,例如:
# config/application.rb
module TestClient
class Application < Rails::Application
config.active_resource.include_format_in_path = false
config.active_resource.site = "http://localhost:80"
...
如果您想为所有ActiveResource
模型设置一些默认选项,这很方便,当然您可以覆盖某些特定模型的任何选项:
# app/models/user.rb
class User < ActiveResource::Base
self.include_format_in_path = true # append .json at the end of url
end