2010-08-09 1 views
2

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

=> 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. Аналогичный вывод на моем Dev машины:

=> 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:

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

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 

ответ

0

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

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

render :text => final 
0

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

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

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

Аналогичная публикация была опубликована here. Возможно, это твоя проблема.

+0

Я видел, что размещение, но я не устанавливая переменную экземпляра (или какой-либо переменной с именем шаблона на любом уровне области). Я обновил вопрос, чтобы показать свой код контроллера. –