我第一次将应用程序转移到生产中时发现了一些问题。我发现我应该在生产中使用预编译资产,所以我尝试编译它们,但是出现了这个错误:
rake aborted!
/var/www/tracker/app/assets/templates/snippets/comment.html.erb has already been required
(in /var/www/tracker/app/assets/javascripts/angularjs/routes.coffee.erb)
这里最令人困惑的是在routes.coffee.erb中没有提到文件comment.html.erb
,它只包含angularjs的几条路线:
angular.module('app', ['ui', 'app.services', 'app.directives', 'app.filters', 'ngCookies', 'ngSanitize', 'mwTable'])
.config ['$routeProvider', ($routeProvider) ->
$routeProvider.when '/',
templateUrl: '<%= asset_path('announces/list.html') %>'
controller: AnnouncesListCtrl
$routeProvider.when '/announce/:fid',
templateUrl: '<%= asset_path('announces/view.html') %>'
controller: AnnouncesViewCtrl
$routeProvider.when '/announce/:fid/edit',
templateUrl: '<%= asset_path('announces/edit.html') %>'
controller: AnnouncesEditCtrl
$routeProvider.when '/registration',
templateUrl: '<%= asset_path('users/edit.html') %>'
controller: UsersEditCtrl
$routeProvider.when '/registration_successful',
templateUrl: '<%= asset_path('users/registration_successful.html') %>'
controller: UsersEditCtrl
$routeProvider.when '/users',
templateUrl: '<%= asset_path('users/list.html') %>'
controller: UsersListCtrl
$routeProvider.otherwise({redirectTo: '/'})
]
我唯一能想到的就是我使用<%= asset_path('announces/view.html') %>
,后者又包含<%= asset_path('snippets/comment.html')%>
。如果这导致问题而不是唯一的解决方案是不使用asset_path
。但是可以吗?
完整的错误消息在这里:https://gist.github.com/SET/5167092。尽管规模很大,但99%没用。
此外,由于我是Rails的新手(来自PHP),我无法理解为什么它已经是必需的东西如此重要?你需要它几次但只加载一次;为什么这会引起问题?
更新 我解决了将&lt;%= asset_path(template)%&gt;`替换为'/ assets / template'的问题,但这不是一个难看的解决方案吗?