2010-08-09 4 views
2

J'essaie de déployer mon application RoR. Il semble fonctionner correctement sur ma machine de développement lorsque RAILS_ENV est configuré pour le développement. Cependant, quand je l'ai mis sur le serveur de production et mettez-le en mode de production, je reçois l'erreur suivante après avoir navigué à la page de démarrage:Erreur view_paths liquide

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

La partie étrange est que dans mon environnement de développement, je reçois une sortie similaire mais je ne suis pas redirigé vers 500.html. La sortie similaire sur ma machine dev est:

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

Mais vous pouvez voir la différence majeure est que sur le serveur de production, il ne ressemble pas à tous les appels sont faits à la base de données.

Mise à jour 2010/08/09 @ 17:41 EST:

Voici mon code de contrôleur qui montre que je ne fais rien avec une variable d'instance nommée modèle:

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 

Répondre

0

n'utilisez pas @template. Utilisez cette (performance peut sucer mais ... vous pouvez avoir à optimiser plus tard):

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

render :text => final 
0

Ce que vous voyez est la façon dont Rails est configuré pour se comporter différemment entre les environnements de développement et de production. Les principales différences pour vous sont:

  • niveau journal de production par défaut ne montre pas la base de données des accès bien qu'ils sont presque certainement
  • passe
  • Dans la production vous êtes redirigé vers un 500 avis. En développement, vous voyez souvent une trace de pile,

L'erreur que vous rencontrez est présente dans les deux cas. Ne supposez pas que ce n'est pas parce que le développement semble moins sérieux que ce n'est pas encore un problème.

Un problème similaire a été signalé here. Peut-être que c'est votre problème.

+0

j'avais vu que l'affichage mais je ne suis pas définir une variable d'instance (ou une variable modèle nommé à tout niveau de portée). J'ai mis à jour la question pour montrer mon code de contrôleur. –

Questions connexes