2014-12-29 2 views
1

У меня проблема с буксированием приложений в рубине.Ruby on Rails ActiveResource :: ServerError два приложения

Моего первое приложение, бэкенд, отлично работает, но когда я хочу два подключение второго приложения с первым он показывает мне ошибку:

ActiveResource::ServerError in PagesController#index 

Failed. Response code = 500. Response message = Internal Server Error . 

я выполнить тэ первого приложения (бэкэнд) в порту 3000 и второй app (frontend) 3001. Бэкэнд содержит привязку к базе данных и работает хорошо, но когда я подключаю первое приложение. Он бросает мне эту ошибку в интерфейсе:

... 
Page Load (43.2ms) SELECT "pages".* FROM "pages" WHERE "pages"."id" = 10 LIMIT 1 
    Rendered api/pages/show.json.rabl (2939.6ms) 
Completed 500 Internal Server Error in 3082ms 

NoMethodError - undefined method `url' for nil:NilClass: 
    app/models/post.rb:45:in `uri' 
    (eval):143:in `block (2 levels) in eval_source' 
    (eval):128:in `block in eval_source' 
    rabl (0.11.5) lib/rabl/builder.rb:152:in `node' 
    rabl (0.11.5) lib/rabl/builder.rb:114:in `block in compile_settings' 
    rabl (0.11.5) lib/rabl/builder.rb:113:in `compile_settings' 
    rabl (0.11.5) lib/rabl/builder.rb:58:in `block in to_hash' 
    rabl (0.11.5) lib/rabl/builder.rb:262:in `cache_results' 
    rabl (0.11.5) lib/rabl/builder.rb:49:in `to_hash' 
    rabl (0.11.5) lib/rabl/engine.rb:86:in `to_hash' 
    rabl (0.11.5) lib/rabl/engine.rb:101:in `to_dumpable' 
... 

И эта ошибка в интерфейсе:

... 
Started GET "/" for 127.0.0.1 at 2014-12-29 04:31:44 +0100 
Processing by PagesController#index as HTML 
Completed 500 Internal Server Error in 3179ms 

ActiveResource::ServerError (Failed. Response code = 500. Response message = Internal Server Error .): 
    app/controllers/pages_controller.rb:9:in `index' 


    Rendered vendor/bundle/ruby/2.1.0/gems/actionpack-3.2.13/lib/action_dispatch/middleware/templates/rescues/_trace.erb (2.1ms) 
    Rendered vendor/bundle/ruby/2.1.0/gems/actionpack-3.2.13/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (2.0ms) 
    Rendered vendor/bundle/ruby/2.1.0/gems/actionpack-3.2.13/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (18.7ms) 

У меня есть это в моей config.yml (внешний интерфейс):

common: 

development: 
    api: 'http://localhost:3000/api' 
    uri: 'http://localhost:3000/' 

production: 
    api: 'http://localhost:3000/api' 
    uri: 'http://localhost:3000/' 

Это в мой page.tb (frontend):

class Page < ActiveResource::Base 

    self.site = Baku.api 
    self.format = :json 

    def self.search(q,locale) 
    result = Page.get(:search, q: "#{q}", locale: locale) 
    object = OpenStruct.new(result) 
    object 
    end 

end 

Это в post.rb (внешний интерфейс):

class Post < ActiveResource::Base 

    self.format = :json 

end 

Я не понимаю эту проблему, я думаю, что Conection между приложением является правильным, но это всегда показывает ошибку:

ActiveResource::ServerError in PagesController#index 

Failed. Response code = 500. Response message = Internal Server Error . 

В строке 45 of pos.rb У меня есть:

def uri 
    "/noticias#{self.widget.page.url}/#{self.name.parameterize}/#{self.id}" 
end 

Я не понимаю, что в этом плохого.

ответ

1

Это строки из журнала

undefined method `url' for nil:NilClass: 
app/models/post.rb:45:in `uri' 

вашего Backend сервера вам сказать, что вы пытаетесь вызвать uri на объект, который находится в строке 45 вашего файла app/models/post.rbnil.

Посмотрите на строку 45 в этом файле. Если вы не можете понять, что происходит, тогда вы можете обновить свой вопрос с помощью кода этого файла.


С новой информацией: Похоже, что у вас есть в вашей базе данных, которая имеет widget в post, но widget не имеет page. Чтобы исправить эту проблему, найдите widget и назначьте ей сообщение. Чтобы избежать этой проблемы в будущем, вам может понадобиться добавить валидатор в widget, который гарантирует наличие сообщения.

+0

В строке 45 у меня есть: определение функции Uri "/noticias#{self.widget.page.url}/#{self.name.parameterize}/#{self.id}" end' Редактирование вопроса. –

+0

@JohnIDelete: Я обновил свой ответ. 'self.widget.page' возвращает nil. У вас есть виджет без страницы. Поэтому вы не можете называть 'url'. – spickermann

Смежные вопросы