14

我正在使用 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 并出现了同样的问题。

有没有人有提示,如何调试这个?

这里有更多信息:

宝石文件

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

3 回答 3

7

你的 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 gem 放在 Gemfile 的最后吗?

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

在要求建造者后立即尝试注册?

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

您使用 RABL master 得到相同的结果吗?

gem 'rabl', :git => "git://github.com/nesquena/rabl.git" 
于 2012-05-24T20:16:18.383 回答
4

问题在于rails在生产中启动时的加载顺序。它需要在 jbuilder 中修复,但这里有一个解决方法:

宝石文件:

gem :jbuilder, :require=>false

配置/初始化程序/jbuilder.rb:

require 'jbuilder'
于 2012-12-06T11:35:41.580 回答
0

如果您碰巧使用的是grape-jbuilder,那么他们添加到configu.ru 的建议可能会导致您的问题。

如果您正在使用 Rails 和 grape-jbuilder,那么请确保在包含葡萄-jbuilder 之前首先需要 Rails 环境。

配置.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
于 2016-08-24T08:12:45.910 回答