[英]500 Internal Server Error - ActionView::Template::Error in Rails Production
[英]Rails3 ActionView Template Handlers doesn't work on Production Server
我正在使用Rails 3.2.3 / Ruby 1.9.3p125 / jbuilder(0.4.0)
在我的view/mycontroller
文件夹中,我有一个show.json.jbuilder
文件。 当我使用rails s -e production
测试本地机器上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的宝石最后在你的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环境。
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.