NameError при использовании act_as_ferret - PullRequest
0 голосов
/ 15 мая 2010

Я получаю эту ошибку при использовании

acts_as_ferret :fields =>[:competitor], :remote => true

NameError в PartController # index

неинициализированная константа PartController :: Конкурент

Моя модель

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 моделью.

Ответы [ 2 ]

0 голосов
/ 15 мая 2015

Это может быть проблема с файлом bin/ferret_server на удаленном сервере drb, который вы используете. Он жалуется на то, что ничего не знает о модели PartController::Competitor. Это связано с тем, что сервер ferret не хочет загружать все классы 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
0 голосов
/ 16 мая 2010

Это может показаться упрощенным предложением, но вот что приходит на ум:

  • У вас на локальном хосте и на сервере одинаковые ОС? Я сгорел из-за небольших несоответствий, таких как различия в том, как Unix и Windows обрабатывают путевые имена в смешанных регистрах.
  • Самые последние версии всех ваших файлов были перемещены? Можете ли вы сделать diff и убедиться, что нет отсутствующего файла конфигурации, переменной среды или чего-то еще?

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

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...