Обработчики шаблонов ActionView Rails3 не работают на Production Server

Я использую Rails 3.2.3/Ruby 1.9.3p125/jbuilder (0.4.0)

В моей папке view/mycontroller я получил файл show.json.jbuilder. когда я тестирую все на своей локальной машине с помощью rails s -e production, все работает отлично. JSON получает визуализацию, как ожидалось.

Но когда я развертываю Ubuntu LTS (nginx/unicorn), я получаю следующее сообщение об ошибке:

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"
):

Когда я проверяю свой сервер, если jbuilder gem установлен с bundle show jbuilder, все кажется правильным.

странно, что сообщение об ошибке не показывает :handlers=>[:erb, :builder, :jbuilder] Очевидно, что обработчик jbuilder отсутствует. Но как решить проблему?

Изменить: Проблема не основана на Jbuilder. Я попробовал rabl и возникла та же проблема.

Есть ли у кого-нибудь подсказка, как отладить это?

Здесь дополнительная информация:

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'

контроллер

  def show

  end

show.json.jbuilder - файл

 json.(@map, :id)

Ответы

Ответ 1

Ваш jbuilder, кажется, пропущен.

Является jbuilder в файле Gemfile.lock?

cat Gemfile.lock | grep jbuilder

Если он отсутствует:

RAILS_ENV=production bundle update jbuilder 

Является ли jbuilder загружаемым?

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

Вы можете создать консоль?

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

Можете ли вы создать в своем контроллере действие?

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

Вы видите ту же ошибку с другой настройкой сервера, такой как Apache и Passenger вместо Nginx и Unicorn, или просто сервер rails?

rails server -e production

Получаете ли вы те же результаты, если вы меняете серверное приложение с производства на разработку?

rails server -e development

Для RABL вы можете попробовать поместить драгоценный камень RABL в свой Gemfile?

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

Попробуйте зарегистрироваться сразу после запроса строителя?

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

Получаете ли вы те же результаты с мастером RABL?

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

Ответ 2

Проблема связана с порядком загрузки, когда рельсы загружаются в производство. Он должен быть исправлен в jbuilder, но вот обходной путь:

Gemfile:

gem :jbuilder, :require=>false

конфигурации/Инициализаторы/jbuilder.rb:

require 'jbuilder'

Ответ 3

Если вы используете grape-jbuilder, то их предложение добавить к configu.ru может вызвать проблемы.

Если вы используете Rails и grape-jbuilder, убедитесь, что сначала требуется среда Rails перед включением grape-jbuilder.

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