【问题标题】:Rails3 ActionView Template Handlers doesn't work on Production ServerRails3 ActionView 模板处理程序在生产服务器上不起作用
【发布时间】:2012-05-18 05:09:40
【问题描述】:

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

谁有提示,如何调试这个?

这里有更多信息:

宝石文件

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)

【问题讨论】:

  • 你的 gem 文件是什么样的?
  • 你不能分享一些源代码吗?从你说的话很难看出什么……
  • 你有什么捆绑器版本(在你的生产机器上,但如果这与你的本地机器不同,那也很高兴知道)
  • 我在生产和开发中都获得了 Bundler 1.1.3 版
  • 只是一般假设,尝试两个终端命令: $ RAILS_ENV=production bundle update $ RAILS_ENV=production rake assets:precompile

标签: ruby-on-rails ruby production-environment actionview


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    宝石文件:

    gem :jbuilder, :require=>false
    

    config/initializers/jbuilder.rb:

    require 'jbuilder'
    

    【讨论】:

      【解决方案3】:

      您的 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 last 放入您的 Gemfile 中吗?

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

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

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

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

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

      【讨论】:

      • 在我的本地机器上一切正常。它也在 gemfile.log 中。感谢您的调试提示!
      • 这些相同的调试技巧是否都适用于您的生产服务器?
      • 调试技巧对我来说都很好,我也有同样的问题。似乎有什么东西“阻止”了这些模板引擎
      • @jamesw 如果你的项目是在 github 上或者开源的,我很乐意去看看,看看能不能帮忙
      • @joelparkerhenderson - 感谢您的提议。我很确定这是服务器配置问题(nginx/unicorn)而不是编码问题。我现在正在使用 as_json 。由于应用程序的敏感性,我无法让您进入我的私人存储库或我的服务器。我与 Nathan(Rabl gem 的所有者)进行了一些通信,但还没有具体的结果。如果我找到解决方案,我会在这里发帖。我很想知道您是否有时间设置测试是否是 nginx/unicorn 的问题 - 如果有一点空闲时间,我应该自己尝试一下。
      猜你喜欢
      • 1970-01-01
      • 2016-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-09
      • 2020-05-20
      • 2014-06-15
      • 1970-01-01
      相关资源
      最近更新 更多