Travis CI上的ActionView :: MissingTemplate错误(但不是本地)

时间:2015-04-24 18:26:44

标签: ruby-on-rails ruby travis-ci

解决方案

这是一个愚蠢的。 Git有时会对文件夹表现奇怪;更改文件夹名称不是推送的更改。在GitHub上,我的视图文件夹是" Bills"有了大写字母B,即使它是"账单"本地。

我通过重命名我的旧文件夹解决了这个问题,创建了一个新的"账单"文件夹,然后将内容从旧文件夹移动到新文件夹(因为移动文件是一个可推送的更改)。有关详细信息,请参阅this

TL;博士

我的测试在本地传递,应用程序似乎工作,但我在一个控制器上的所有测试都失败了ActionView :: MissingTemplate错误,尽管模板似乎在正确的位置。知道为什么吗?

问题

我只是在下午重构一个rails应用程序(最值得注意的是,将立法重命名为Bill),但我现在遇到了一个我无法弄清楚的构建问题。

当我在本地运行我的测试时,它们全部通过,并且点击应用程序按预期工作。但是,在Travis CI上,我收到了bill_controller_test.rb中所有内容的错误(ActionView :: MissingTemplate):

Error:
BillsControllerTest#test_: bills should get index. :
ActionView::MissingTemplate: Missing template bills/index, application/index with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :prawn, :coffee, :jbuilder]}. Searched in:
  * "/home/travis/build/troy-open-data/legislative_twitter/app/views"
  * "/home/travis/build/troy-open-data/legislative_twitter/vendor/bundle/ruby/2.2.0/gems/kaminari-0.16.3/app/views"
  * "/home/travis/build/troy-open-data/legislative_twitter/vendor/bundle/ruby/2.2.0/gems/foundation-rails-5.5.1.0/app/views"
    test/controllers/bills_controller_test.rb:6:in `block (2 levels) in <class:BillsControllerTest>'

On Travis

但是,每个控制器操作的文件app/views/bills/*.html.erb似乎都在那里。为什么Travis找不到它们? (同样,bill_controller_test.rb中的测试是唯一在Travis上失败并且它们在本地传递的测试。)

我无法在本地复制这些内容,到目前为止,谷歌搜索和摆弄它并没有成功。

我尝试了什么

  • 我已经仔细检查过所有对bill的引用都有正确的多元化和大写(它们似乎) - 这是我的第一个猜测,因为OS X和Linux有时会以不同的方式对待大写。
  • 我已检查过其他编辑内容,尤其是.travis.yml和test_helper.rb的配置更改,但似乎都没有导致问题。
  • 我已经确认,bills_controller_test.rb实际上是连接到app / controllers / bills_controller.rb,它是(控制器操作结束时render: :<action>上出现的错误)

相关代码段

test / controllers / bills_controller_test.rb(#index)on GitHub

require 'test_helper'

class BillsControllerTest < ActionController::TestCase
  context 'bills' do
    should 'get index' do
      get :index
      assert_response :success
      assert_not_nil assigns(:bills)
    end
    ...
  end
  ...
end

app / controllers / bills_controller.rb(#index)on GitHub

class BillsController < ApplicationController
  before_action :set_bill, only: [:show, :edit, :update, :destroy]

  # GET /bills
  def index
    @bills = Bill.by_recent
                 .includes(:attachments)
                 .page(params[:page])
  end
  ...
end

routes.rb on GitHub

require 'api_version'  # lib/api_version.rb

Rails.application.routes.draw do
  namespace :api, defaults: { format: 'json' } do
    scope module: :v1, constraints: ApiVersion.new('v1', true) do
      resources :bills,         only: [:index, :show]
      resources :meetings,      only: [:index, :show]
      scope '/meetings/:id' do
        get '/agenda',  to: 'meetings#agenda',  as: 'agenda'
        get '/minutes', to: 'meetings#minutes', as: 'minutes'
      end
      resources :organizations, only: [:index, :show]
      root to: 'data#index'
    end
  end


  resources :bills
  resources :organizations
  resources :meetings
  scope '/meetings/:id' do
    get '/agenda',  to: 'meetings#agenda', as: 'agenda'
    get '/minutes', to: 'meetings#minutes', as: 'minutes'
    get '/in_progress',  to: 'meetings#start_meeting', as: 'start_meeting'
    get '/agenda/toggle',   to: 'meetings#toggle_agenda',  as: 'toggle_agenda'
    get '/minutes/toggle',  to: 'meetings#toggle_minutes', as: 'toggle_minutes'
  end
  get 'search', to: 'search#index', as: 'search'
  post 'versions/:id/revert', to: 'versions#revert', as: 'revert_version'

  root 'meetings#index'
end

  • 因为我刚刚将立法更改为Bill?
  • ,我能否与Travis有某种缓存问题?
  • 这可能是我的API和默认命名空间之间的命名空间问题(我不这么认为,因为Bills是唯一的问题)
  • 我错过了错字吗?

1 个答案:

答案 0 :(得分:3)

我发布后就知道了。几个小时前为什么不能发生这种情况? :(如果其他人有同样的问题,我会留下这个问题。

Git不跟踪文件夹跟踪文件。我在GitHub上检查了我的存储库,并且视图位于/ app / views / B 之下;我想当我在重构期间更改它时,由于它是一个文件夹而没有被推送。

我通过将本地文件重命名为Bills并将所有内容从Bills(旧文件夹)移动到bill(新文件夹)来修复它。 (more detail