解决方案
这是个愚蠢的决定。git有时对文件夹的行为很奇怪;更改文件夹名并不是一个被推送的更改。在github上,我的视图文件夹是带有大写字母b的“bills”,尽管它是本地的“bills”。
我解决这个问题的方法是重命名旧文件夹,创建一个新的“bills”文件夹,然后将内容从旧文件夹移动到新文件夹(因为移动文件是一个可推的更改)。有关详细信息,请参见this
DR
我的测试在本地通过,应用程序似乎可以工作,但是我在一个控制器上的所有测试都失败了,原因是actionview::missingtemplate错误,尽管模板似乎在正确的位置。知道为什么吗?
问题
我刚刚花了一个下午的时间重构了一个rails应用程序(最值得注意的是,将立法重新命名为bill),但是我现在遇到了一个构建问题,我还没弄清楚。
当我在本地运行测试时,它们都通过了,点击应用程序可以按预期工作。但是,在travis ci上,对于bills_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似乎都存在。为什么特拉维斯找不到他们?(同样,bills_controller_test.rb中的测试是travis上唯一失败的测试,它们在本地通过。)
我不能在本地复制这个,我的谷歌搜索和摆弄到目前为止还没有成功。
我试过的
我仔细检查了所有提到bill的地方是否都有正确的复数和大写(它们看起来是这样的)–这是我的第一个猜测,因为os x和linux有时对大写的处理方式不同。
我已经检查了其他编辑,特别是对.travis.yml和test_helper.rb的配置更改,但似乎都没有引起问题。
我已经确认bills_controller_test.rb实际上正在连接app/controllers/bills_controller.rb,它是(错误在控制器操作结束时的render: :<action>上出现)
相关代码段
测试/控制器/帐单控制器测试rb(索引)(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

应用程序/控制器/帐单控制器.rb(索引)(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

思想
既然我刚把立法改成了法案,我能不能跟特拉维斯有点关系?
这可能是我的api和默认名称空间之间的名称空间问题吗(我不这么认为,因为bills是唯一的问题)
我漏了一个打字错误吗?

最佳答案

我刚发完信就想出来了。为什么这件事几个小时前就不能发生?(我不提这个问题,以防别人也有同样的问题。
git不像跟踪文件那样跟踪文件夹。我检查了github上的存储库,那里的视图在/app/views/bills下;我想当我在重构过程中更改它时,它并没有被推送,因为它是一个文件夹。
我将本地文件重命名为bills,并将所有内容从bills(旧文件夹)移动到bills(新文件夹),从而解决了这个问题。(more detail

关于ruby-on-rails - Travis CI上的ActionView::MissingTemplate错误(但不是本地错误),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29854887/

10-10 01:20