Question

I've just started using JBuilder and have it working successfully locally in development mode.

I have just pushed it to my Nginx/Unicorn server and whenever i try to view a url that uses JBuilder json I get a Template is Missing error, and in the :handlers list there is no JBuilder?

Template is missing

Missing template client_events/all_client_events_for_client, application/all_client_events_for_client with {:locale=>[:en], :formats=>[:html, :text, :js, :css, :ics, :csv, :png, :jpeg, :gif, :bmp, :tiff, :mpeg, :xml, :rss, :atom, :yaml, :multipart_form, :url_encoded_form, :json, :pdf, :zip], :handlers=>[:erb, :builder, :slim, :haml]}. Searched in: * "/home/deployer/apps/bigfor-blue/releases/20121022093934/app/views"

Its totally working locally but for some reason it won't agree when i try to run it in production.

Any ideas would be great.

Cheers

UPDATE:

Development.rb

  BigforBlue::Application.configure do
    # Settings specified here will take precedence over those in config/application.rb

    # In the development environment your application's code is reloaded on
    # every request. This slows down response time but is perfect for development
    # since you don't have to restart the web server when you make code changes.
    config.cache_classes = false

    # Log error messages when you accidentally call methods on nil.
    config.whiny_nils = true

    # Show full error reports and disable caching
    config.consider_all_requests_local       = true
    config.action_controller.perform_caching = false

    # Print deprecation notices to the Rails logger
    config.active_support.deprecation = :log

    # Only use best-standards-support built into browsers
    config.action_dispatch.best_standards_support = :builtin

    # Raise exception on mass assignment protection for Active Record models
    config.active_record.mass_assignment_sanitizer = :strict

    # Log the query plan for queries taking more than this (works
    # with SQLite, MySQL, and PostgreSQL)
    config.active_record.auto_explain_threshold_in_seconds = 0.5

    # Do not compress assets
    config.assets.compress = false

    # Expands the lines which load the assets
    config.assets.debug = true


    # MAILER

    # Don't care if the mailer can't send
    config.action_mailer.raise_delivery_errors = true

    config.action_mailer.delivery_method = :smtp

    config.action_mailer.default_url_options = { :host => "localhost:3000" }
    ActionMailer::Base.smtp_settings = {
      :address => "smtp.gmail.com",
      :port => 587,
      :authentication => :plain,
      :user_name => "**** TAKEN OUT ****",
      :password => "**** TAKEN OUT ****",
      :openssl_verify_mode => "none"
    }

  end

Production.rb

  BigforBlue::Application.configure do
    # Settings specified here will take precedence over those in config/application.rb

    # Code is not reloaded between requests
    config.cache_classes = true

    # Full error reports are disabled and caching is turned on
    config.consider_all_requests_local       = true
    config.action_controller.perform_caching = true

    # Disable Rails's static asset server (Apache or nginx will already do this)
    config.serve_static_assets = false

    # Compress JavaScripts and CSS
    config.assets.compress = true

    # Don't fallback to assets pipeline if a precompiled asset is missed
    config.assets.compile = false

    # Generate digests for assets URLs
    config.assets.digest = true

    # Defaults to nil and saved in location specified by config.assets.prefix
    # config.assets.manifest = YOUR_PATH

    # Specifies the header that your server uses for sending files
    # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache
    # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx

    # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
    # config.force_ssl = true

    # See everything in the log (default is :info)
    # config.log_level = :debug

    # Prepend all log lines with the following tags
    # config.log_tags = [ :subdomain, :uuid ]

    # Use a different logger for distributed setups
    # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)

    # Use a different cache store in production
    # config.cache_store = :mem_cache_store

    # Enable serving of images, stylesheets, and JavaScripts from an asset server
    # config.action_controller.asset_host = "http://assets.example.com"

    # Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added)
    # config.assets.precompile += %w( search.js )

    # Disable delivery errors, bad email addresses will be ignored
    # config.action_mailer.raise_delivery_errors = false

    # Enable threaded mode
    # config.threadsafe!

    # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
    # the I18n.default_locale when a translation can not be found)
    config.i18n.fallbacks = true

    # Send deprecation notices to registered listeners
    config.active_support.deprecation = :notify

    # Log the query plan for queries taking more than this (works
    # with SQLite, MySQL, and PostgreSQL)
    # config.active_record.auto_explain_threshold_in_seconds = 0.5

    # MAILER
    # config.action_mailer.default_url_options = { :host => "http://*** TAKEN OUT ***" }

  end

UPDATE 2

I removed JBuilder from my setup and replaced it with RABL and I am still having the same issue of missing templates and missing handlers.

So it looks like its not a Jbuilder/RABL error but more like a Unicorn/Nginx error.

Was it helpful?

Solution

In the end this issue looks like it was caused either in configuration or during the initial Capistrano 'cap deploy:setup', or 'cap deploy:cold'

I ended up removing the app from my server and performing a new 'cap deploy:setup' and 'cap deploy:cold' which fixed the issue and JBuilder worked as expected.

No idea what caused the issue because the Capistrano recipe didn't change between the first buggy deployment, and the second working deployment.

So my advice if you get stuck on an issue like this a full redeploy of your app could be an option.

JB

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top