Я написал базовое приложение на Rails 3, которое показывает форму и форму загрузки по конкретным URL-адресам. Вчера все работало нормально, но сейчас я сталкиваюсь с несколькими проблемами, которые требуют решения. Я постараюсь описать каждую проблему как можно лучше. Причина, по которой я их объединяю, в том, что я чувствую, что они все связаны и мешают мне завершить мою задачу.
1. Невозможно запустить приложение в режиме разработки
По неизвестной причине я не могу заставить приложение работать в режиме разработки. В настоящее время я переписал файл production.rb из среды с настройками из среды разработки, чтобы получить действительные трассировки стека.
Я добавил производственный параметр RailsEnv в свой параметр VirtualHost в apache2, но, похоже, это не имеет значения. Кроме того, настройки ENV не зависят от производства.
2. ArgumentError для всех вызовов
Какой бы звонок я ни сделал, это приводит к этому сообщению об ошибке. Файл журнала сообщает мне следующее:
Начат GET "/" для 192.168.33.82 в
Чт 07 Апр 00:54:48 -0700 2011
ArgumentError (неправильный номер
аргументы (1 для 0)):
Вынесено
/usr/lib/ruby/gems/1.8/gems/actionpack-3.0.6/lib/action_dispatch/middleware/templates/rescues/_trace.erb
(1,0 мс) отображается
/usr/lib/ruby/gems/1.8/gems/actionpack-3.0.6/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb
(4.1ms) Оказывается
/usr/lib/ruby/gems/1.8/gems/actionpack-3.0.6/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb
в пределах спасения / макета (8,4 мс)
Это ничего не значит для меня на самом деле. Я понятия не имею, что происходит не так. В настоящее время у меня есть только один контроллер, который выглядит так:
class SearchEngineController < ApplicationController
def upload
end
def search
@rows = nil
end
# This function will receive the query string from the search form and perform a search on the
# F.I.S.E index to find any matching results
def query
index = Ferret::Index::Index.new :path => "/public/F.I.S.E", :default_field => 'content'
@rows = Array.New
index.search_each "content|title:#{params[:query]}" do |id,score, title|
@rows << {:id => id, :score => score, :title => title}
end
render :search
end
# This function will receive the file uploaded by the user and process it into the
# F.I.S.E for searching on keywords and synonims
def process
index = Ferret::Index::Index.new :path => "public/F.I.S.E", :default_field => 'content'
file = File.open params[:file], "r"
xml = REXML::Document.new file
filename = params[:file]
title = xml.root.elements['//body/title/text()']
content = xml.root.elements['normalize-space(//body)']
index << { :filename => filename, :title => title, :content => content}
file.close
FileUtils.rm file
end
end
Маршрутизация моего приложения имеет следующую настройку: Опять же, все это довольно просто и, вероятно, может быть сделано лучше.
Roularta::Application.routes.draw do
# define all the url paths we support
match '/upload' => 'search_engine#upload', :via => :get
match '/process' => 'search_engine#process', :via => :post
# redirect the root of the application to the search page
root :to => 'search_engine#search'
# redirect all incoming requests to the query view of the search engine
match '/:controller(/:action(/:id))' => 'search_engine#search'
end
Если кто-то может определить, что не так и почему это приложение не работает, пожалуйста, дайте мне знать. При необходимости я могу отредактировать этот awnser и добавить дополнительные файлы, которые могут потребоваться для решения этой проблемы.
EDIT
Мне удалось продвинуться дальше, переименовав одну из функций на контроллере. Я переименовал поиск в создание, и теперь я получаю ошибки HAML. Возможно, я использовал ключевое слово ...?