Rails3 ActionView模板处理程序不适用于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" ): 

当我检查我的服务器上是否使用bundle show jbuilder安装了jbuilder gem时,一切似乎都正确。

奇怪的是,错误消息没有显示: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) 

你的jbuilder似乎被跳过了。

你的Gemfile.lock文件中有jbuilder吗?

 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大师有同样的结果吗?

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

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

的Gemfile:

 gem :jbuilder, :require=>false 

配置/初始化/ jbuilder.rb:

 require 'jbuilder' 

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

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

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