2012-05-09 82 views
14

Używam Rails 3.2.3/Ruby 1.9.3p125/JBuilder (0.4.0)Rails3 actionView Szablon Rączki nie działa na serwerze produkcyjnym

W moim folderze view/mycontroller mam plik show.json.jbuilder. kiedy testuję wszystko na mojej lokalnej maszynie z rails s -e production wszystko działa dobrze. JSON zostanie renderowany jako oczekiwany.

Ale gdy wdrożyć do Ubuntu LTS (nginx/jednorożec) pojawia się następujący komunikat o błędzie:

ActionView::MissingTemplate (Missing template mycontroller/show, application/show with {:locale=>[:de, :en], :formats=>[:json], :handlers=>[:erb, :builder]}. Searched in: 
    * "/home/deployer/apps/myapp/releases/#############/app/views" 
): 

Kiedy mogę sprawdzić na moim serwerze, jeśli gem JBuilder jest instalowany z bundle show jbuilder wszystko wydaje się w porządku.

Dziwne jest to, że komunikat o błędzie nie wyświetla się :handlers=>[:erb, :builder, :jbuilder] Oczywiście brakuje programu obsługi jBogera. Ale jak mogę rozwiązać problem?

Edytuj: Problem nie jest oparty na JBoader. Próbowałem RABL i pojawił się ten sam problem.

Czy ktoś ma podpowiedź, jak to debugować?

Oto kilka informacji:

Gemfile

source 'https://rubygems.org' 

gem 'rails', '3.2.3' 
gem 'jquery-rails' 
gem 'mysql2' 
gem 'simple_form' 

# Gems used only for assets and not required 
# in production environments by default. 
group :assets do 
    gem 'sass-rails', '~> 3.2.3' 
    gem 'coffee-rails', '~> 3.2.1' 
    gem 'uglifier', '>= 1.0.3' 
    gem 'bootstrap-sass', '2.0.2' 
end 

# Use unicorn as the app server 
gem 'unicorn' 

# Deploy with Capistrano 
gem 'capistrano' 

# for performance monitoring 
gem 'newrelic_rpm' 

# use asset pipline and flash 
gem 'swf_fu', '~> 2.0' 

gem 'geocoder' 

# To use Jbuilder templates for JSON 
gem 'jbuilder' 

Controller

def show 

    end 

show.json.jbuilder - plik

json.(@map, :id) 
+0

Jaki plik gem wyglądał? –

+0

Nie możesz udostępnić kodu źródłowego? Ciężko powiedzieć cokolwiek z tego, co powiedziałeś ... – DallaRosa

+0

Jaka jest twoja wersja bundle (na maszynie produkcyjnej, ale jeśli jest inna od twojej lokalnej maszyny, to dobrze też wiedzieć) –

Odpowiedz

7

Twój jbuilder wydaje się być pominięty.

Czy jbuilder znajduje się w pliku Gemfile.lock?

cat Gemfile.lock | grep jbuilder 

Jeśli brakuje:

RAILS_ENV=production bundle update jbuilder 

Czy JBuilder obciążana?

RAILS_ENV=production bundle exec rails console 
> require 'jbuilder' 
=> false # this is false if jbuilder is pre-loaded 

Czy można zbudować w konsoli?

> Jbuilder.encode{|j| j.foo :bar } 
=> "{\"foo\":\"bar\"}" 

Czy można zbudować w działaniu kontrolera?

def the_method_you_are_testing 
    raise Jbuilder.encode{|j| j.foo :bar } 
end 

Czy widzisz ten sam błąd o innej konfiguracji serwera, takich jak Apache & Pasażera zamiast Nginx & Unicorn, lub po prostu szyny serwer?

rails server -e production 

Czy otrzymasz takie same wyniki, jeśli zmienisz aplikację serwerową z produkcji na programowanie?

rails server -e development 

Dla Rabl, można spróbować oddanie gem Rabl ostatni w Gemfile?

gem 'rails' 
#... 
gem 'rabl' 

Spróbuj zarejestrować natychmiast po złożeniu zapytania o budowniczego?

require 'tilt' 
require 'rabl' 
# ... 
require 'builder' 
Rabl.register! 

Czy otrzymujesz takie same wyniki z wzorcem RABL?

gem 'rabl', :git => "git://github.com/nesquena/rabl.git" 
+0

Wszystko działa dobrze na moim lokalnym urządzeniu. Jest również w pliku gemfile.log. Dzięki za debugowanie końcówki! – HaNdTriX

+0

Czy te same wskazówki dotyczące debugowania działają na serwerze produkcyjnym? – joelparkerhenderson

+0

Wskazówki do debugowania działają dobrze dla mnie, mam również ten sam problem. Wydaje się, że coś blokuje te silniki szablonów – jamesc

4

Problem dotyczy kolejności załadunku podczas produkcji szyn na szynach. potrzebuje ona zostać ustalona w JBuildera, ale tutaj jest obejście:

Gemfile:

gem :jbuilder, :require=>false 

config/inicjalizatory/jbuilder.rb:

require 'jbuilder' 
+0

To rozwiązało to dla mnie.Dziękuję – ksol

+0

To działało również dla mnie .. Jak to jeszcze jest? –

0

Jeśli zdarzy się przy użyciu grape-jbuilder wtedy ich sugestia dodania do pliku configu.ru może być przyczyną problemu.

Jeśli używasz Rails i grape-jbuilder, upewnij się, że najpierw potrzebujesz środowiska Rails przed włączeniem winorośli.

config.ru

require ::File.expand_path('../config/environment', __FILE__) 

require 'grape/jbuilder' 

use Rack::Config do |env| 
    env['api.tilt.root'] = 'app/views/api' 
end 

run Rails.application 
Powiązane problemy