解决方案
这是个愚蠢的决定。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/