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 を試してみましたが、同じ問題が発生します。

これをデバッグする方法はありますか?

ここにいくつかの詳細情報:

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

Nginx と Unicorn の代わりに Apache と Passenger を使用したり、単純に 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" 
于 2012-05-24T20:16:18.383 に答える
4

問題は、レールが本番環境で起動するときのロード順序にあります。jbuilder で修正する必要がありますが、回避策は次のとおりです。

Gemfile:

gem :jbuilder, :require=>false

config/initializers/jbuilder.rb:

require 'jbuilder'
于 2012-12-06T11:35:41.580 に答える
0

もしあなたがグレープ jbuilderを使用しているなら、configu.ru に追加するという彼らの提案が問題を引き起こしている可能性があります。

Rails とグレープ jbuilder を使用している場合は、グレープ 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
于 2016-08-24T08:12:45.910 に答える