2012-05-09 33 views
14

上工作,我用Rails 3.2.3 /紅寶石1.9.3p125/JBuilder的(0.4.0)Rails3中模板的ActionView處理程序不生產服務器

在我view/mycontroller文件夾中我得到了show.json.jbuilder文件。 當我測試我的本地機器上的所有內容時rails s -e production一切正常。 JSON被渲染爲預期的。

但是當我部署到Ubuntu LTS(nginx的/麒麟)我得到以下錯誤信息:

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) 
+0

什麼是您的寶石文件是什麼樣子? –

+0

你不能分享一些源代碼?很難告訴你所說的任何事情...... – DallaRosa

+0

你有什麼捆綁版本(在你的生產機器上,但是如果這與你的本地機器不同,這也是很好的知識) –

回答

7

你的jbuilder似乎被跳過了。

jmilder是否在你的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 &客運代替Nginx的&獨角獸,或者乾脆導軌服務器?

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" 
+0

一切工作正常我的本地mashine。它也在gemfile.log中。感謝您的調試提示! – HaNdTriX

+0

做這些相同的調試技巧都可以在您的生產服務器上運行嗎? – joelparkerhenderson

+0

調試技巧對我來說都工作正常,我也有同樣的問題。如果您的項目在github或開源上,我似乎很高興看一看,看看這些模板引擎'阻塞' – jamesc

4

問題在於導軌在生產中的加載順序。它需要被固定在JBuilder中,但這裏是一個解決辦法:

的Gemfile:

gem :jbuilder, :require=>false 

配置/初始化/ jbuilder.rb:

require 'jbuilder' 
+0

這解決了它對我來說。謝謝 – ksol

+0

這也適用於我..這是怎麼回事? –

0

如果你碰巧使用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