Обработчики шаблонов Rails3 ActionView не работают на производственном сервере

Я использую 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 с bundle show jbuilder, все кажется правильным.

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

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

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

Дополнительная информация:

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)

person HaNdTriX    schedule 09.05.2012    source источник
comment
Как выглядит ваш файл gem?   -  person Frederick Cheung    schedule 21.05.2012
comment
не могли бы вы поделиться исходным кодом? Из того, что вы сказали, довольно сложно что-то сказать...   -  person DallaRosa    schedule 21.05.2012
comment
Какая версия сборщика у вас есть (на вашей производственной машине, но если она отличается от вашей локальной машины, это тоже полезно знать)   -  person Frederick Cheung    schedule 21.05.2012
comment
Я получил Bundler версии 1.1.3 как для производства, так и для разработки.   -  person HaNdTriX    schedule 21.05.2012
comment
просто общие предположения, попробуйте две терминальные команды:   -  person okliv    schedule 22.05.2012
comment
Совпадают ли ваши фактические версии драгоценных камней между средой разработки и производством? Не знаю, с чего еще начать, но Bundler со временем вызывает у меня много проблем, если я точно не укажу все версии gem.   -  person David    schedule 23.05.2012
comment
Та же проблема здесь. Вы это исправили?   -  person jamesc    schedule 05.06.2012


Ответы (3)


Ваш 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" 
person joelparkerhenderson    schedule 24.05.2012
comment
На моей локальной машине все работает. Он также есть в gemfile.log. Спасибо за совет по отладке! - person HaNdTriX; 25.05.2012
comment
Все ли эти советы по отладке работают на вашем рабочем сервере? - person joelparkerhenderson; 27.05.2012
comment
У меня все советы по отладке работают нормально, у меня тоже такая же проблема. Кажется, что-то «блокирует» эти механизмы шаблонов. - person jamesc; 06.06.2012
comment
@jamesw, если ваш проект находится на github или с открытым исходным кодом, я буду рад взглянуть и посмотреть, смогу ли я помочь - person joelparkerhenderson; 07.06.2012
comment
@joelparkerhenderson - Спасибо за предложение. Я почти уверен, что это проблема конфигурации сервера (nginx/unicorn), а не проблема кодирования. Сейчас я использую as_json. Из-за чувствительности приложения я не могу позволить вам войти в мой личный репозиторий или на мой сервер. У меня была переписка с Натаном (владелец драгоценного камня Rabl), но ничего конкретного из этого пока не вышло. Я отпишусь здесь, если когда-нибудь найду решение. Мне было бы интересно узнать, есть ли у вас время, чтобы настроить тест, если это проблема с nginx/unicorn - что-то, что я должен попробовать сам, учитывая немного свободного времени. - person jamesc; 07.06.2012
comment
@jamesw Добавлено больше советов по отладке для вас ... посмотрите, поможет ли это. - person joelparkerhenderson; 07.06.2012
comment
@joelparkerhenderson У меня та же проблема, с использованием rabl. Похоже, что проблема связана с комбинацией nginx+unicorn... - person Alex Takitani; 12.07.2012
comment
Мое исправление оказалось в контроллере. Мне пришлось изменить: format.json { render json: @records } на format.json, и файл index.json.jbuilder, который у меня был, начал привыкать. - person Jon; 03.10.2013

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

Gemfile:

gem :jbuilder, :require=>false

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

require 'jbuilder'
person Sam Oliver    schedule 06.12.2012

Если вы используете 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
person Darren Hicks    schedule 24.08.2016