我在使用
时遇到此错误acts_as_ferret :fields =>[:competitor], :remote => true
PartController中的NameError #index
未初始化的常量PartController :: Competitor
class Competitor < ActiveRecord::Base
validates_presence_of :fee_earner_id, :notes
belongs_to :fee_earner
belongs_to :country
belongs_to :state
belongs_to :user
acts_as_ferret :fields =>[:competitor], :remote => true
end
class PartController < ApplicationController
def index
@proscribeds = Competitor.paginate(:all,
:order => sort ,
:page => params[:page],
:per_page => 70 )
end
end
它在 localhost 中运行良好,但是当我在服务器中部署它时,我收到此错误。
act_as_ferret
与其他模特配合得很好。我不知道为什么这不仅适用于Competitor
模型。
答案 0 :(得分:0)
这些看似简单的建议,但这就是我想到的:
我知道这些建议并不是特定于特定于Rail / Ruby的,但我发现很少有配置问题比实际的代码错误更令我头疼。
祝你好运!答案 1 :(得分:0)
这可能是您正在运行的远程drb服务器上的bin/ferret_server
文件的问题。它抱怨的是它对PartController::Competitor
模型一无所知。这是因为ferret-server并没有像Rails那样急于加载所有Rails类。
我有类似的问题,解决方案是还要求Rails config/environment
文件以及Rails config/application
文件。
这样的事情:
begin
ENV['FERRET_USE_LOCAL_INDEX'] = 'true'
if env = $ferret_server_options['environment']
ENV['RAILS_ENV'] = env
end
# determine RAILS_ROOT unless already set
root = File.expand_path(determine_rails_root)
begin
require File.join(root, 'config', 'application')
# Also require environment to eager load Rails classes
require File.join(root, 'config', 'environment')
rescue
puts "Error booting your rails app at #{root}: #{$!}\n#{$!.backtrace.join("\n")}"
raise $!
end
puts "Rails.root: #{Rails.root}"
puts "Rails.env: #{Rails.env}"
require 'acts_as_ferret/server/server'
ActsAsFerret::Server::Server.new.send($ferret_server_action)
rescue Exception => e
$stderr.puts(e.message)
$stderr.puts(e.backtrace.join("\n")) if $ferret_server_options['debug']
exit(1)
end