Жидкая ошибка view_paths - PullRequest
       5

Жидкая ошибка view_paths

2 голосов
/ 10 августа 2010

Я пытаюсь развернуть приложение RoR. Кажется, что он нормально работает на моей машине для разработки, когда RAILS_ENV настроен на разработку. Однако, когда я помещаю его на рабочий сервер и устанавливаю его в рабочий режим, я получаю следующую ошибку после перехода на начальную страницу:

=> Booting Mongrel
=> Rails 2.3.8 application starting on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server


Processing PagesController#show (for 173.79.8.203 at 2010-08-09 20:17:21) [GET]
  Parameters: {"slug"=>[], "action"=>"show", "controller"=>"pages"}

NoMethodError (undefined method `view_paths' for #<Liquid::Template:0x7fc6f8b5f8a8>):




Processing ApplicationController#show (for 173.79.8.203 at 2010-08-09 20:17:21) [GET]
  Parameters: {"slug"=>[], "action"=>"show", "controller"=>"pages"}

NoMethodError (undefined method `view_paths' for #<Liquid::Template:0x7fc6f8b5f8a8>):


Rendering /home/flavorpulse/sites/public.flavorpulse.com/public/500.html (500 Internal Server Error)

Странная часть заключается в том, что в моей среде разработки я получаю похожий вывод, но меня не перенаправляют на 500.html. Аналогичный вывод на моей машине разработчика:

=> Booting Mongrel
=> Rails 2.3.8 application starting on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
  SQL (0.1ms)   SET NAMES 'utf8'
  SQL (0.1ms)   SET SQL_AUTO_IS_NULL=0


Processing PagesController#show (for 127.0.0.1 at 2010-08-09 16:07:50) [GET]
  Parameters: {"slug"=>[], "action"=>"show", "controller"=>"pages"}
  Domain Columns (1.4ms)   SHOW FIELDS FROM `domains`
  Domain Load (45.8ms)   SELECT * FROM `domains` WHERE (`domains`.`domain_name` = 'localhost') LIMIT 1
  Account Columns (1.6ms)   SHOW FIELDS FROM `accounts`
  Account Load (0.8ms)   SELECT * FROM `accounts` WHERE (`accounts`.`id` = 1) 
  CACHE (0.0ms)   SELECT * FROM `accounts` WHERE (`accounts`.`id` = 1) 
  Theme Columns (2.0ms)   SHOW FIELDS FROM `themes`
  Theme Load (0.8ms)   SELECT * FROM `themes` WHERE (`themes`.`id` = 1) 
  PageTemplate Columns (1.4ms)   SHOW FIELDS FROM `page_templates`
  PageTemplate Load (0.3ms)   SELECT * FROM `page_templates` WHERE (`page_templates`.`name` = 'index') AND (`page_templates`.theme_id = 1) LIMIT 1
  CACHE (0.0ms)   SELECT * FROM `domains` WHERE (`domains`.`domain_name` = 'localhost') LIMIT 1
  CACHE (0.0ms)   SELECT * FROM `accounts` WHERE (`accounts`.`id` = 1) 
  CACHE (0.0ms)   SELECT * FROM `accounts` WHERE (`accounts`.`id` = 1) 
  CACHE (0.0ms)   SELECT * FROM `themes` WHERE (`themes`.`id` = 1) 
  PageLayout Load (0.4ms)   SELECT * FROM `page_layouts` WHERE (`page_layouts`.theme_id = 1) LIMIT 1
  PageLayout Columns (1.4ms)   SHOW FIELDS FROM `page_layouts`
  CACHE (0.0ms)   SELECT * FROM `domains` WHERE (`domains`.`domain_name` = 'localhost') LIMIT 1
  CACHE (0.0ms)   SELECT * FROM `accounts` WHERE (`accounts`.`id` = 1) 
  CACHE (0.0ms)   SELECT * FROM `accounts` WHERE (`accounts`.`id` = 1) 
  Page Load (0.3ms)   SELECT * FROM `pages` WHERE (`pages`.`show_in_navigation` = 1) AND (`pages`.account_id = 1) 

NoMethodError (undefined method `view_paths' for #<Liquid::Template:0x10337ef98>):


Rendering rescues/layout (internal_server_error)

Но вы можете заметить, что основное отличие состоит в том, что на рабочем сервере не похоже, что какие-либо вызовы к базе данных совершаются.

Обновлено 2010/08/09 @ 17:41 EST:

Вот мой код контроллера, который показывает, что я ничего не делаю с переменной экземпляра с именем template:

class PagesController < ApplicationController
  def show
    if params[:slug].blank?
      # show homepage
      page = current_account.theme.page_templates.find_by_name("index")
    else
      # show the right page
      #TODO: This doesn't support slashes in the slug. This URL will make this barf: about/us/us/us/us/about-us.html
      page = Page.first(:conditions => ["account_id = :account_id AND slug = :slug", { :account_id =>  current_account.id, :slug => params[:slug] }])
    end

    if page.nil?
      #TODO: Render a better 404 page.
      content = "4oh4 - File Not Found"
    else
      content = page.content      
    end

    assigns = {
    }
    render_page(content, assigns)
  end
end

Ответы [ 2 ]

0 голосов
/ 10 августа 2010

не используйте @template.Используйте это (производительность может отстать, хотя ... возможно, вам придется оптимизировать это позже):

final_render = Liquid::Template.parse(page_layout)  # Parses and compiles the template
final = final_render.render(assigns)

render :text => final
0 голосов
/ 10 августа 2010

Что вы видите, так это то, как Rails настроен по-разному в средах разработки и производства. Основные отличия для вас:

  • Уровень производственного журнала по умолчанию не показывает доступ к базе данных, хотя они почти наверняка происходят
  • В процессе производства вы будете перенаправлены на 500 уведомление. В разработке вы часто видите трассировку стека,

Ошибка, с которой вы сталкиваетесь, присутствует в обоих случаях. Не думайте, что из-за того, что это кажется менее серьезным в процессе разработки, это еще не проблема.

Похожая проблема была опубликована здесь . Может быть, это твоя проблема.

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