1

我正在尝试使用 RAILS_ENV=production bundle exec rake assets:precompile 编译我的 Rails 应用程序资产,但这不会编译我的 AngularJS 资产,所以我的控制台报告了这一点:

 ActionController::RoutingError (No route matches [GET] "/assets/app/views/products/index.html"):

我的 AngularJS 资产位于“/assets/app/”下,因此我尝试通过将以下内容添加到我的 production.rb 中来编译 angular 文件夹,但仍然无法正常工作。

 config.assets.precompile += %w(app/* bootstrap/* datatable/* ....

我可以在这个路径下找到编译后的索引文件:

 public/assets/app/views/products/index-2429bd0f8fc0762dcc075e51f0306c5b.html

任何的想法?

更新

还在生产中尝试了 config.serve_static_assets = false ,但它会导致更多缺少资产错误

谢谢

4

1 回答 1

1

我已经在我的应用程序中通过使用常量来获得正确的路径结构来解决这个问题。

我的 Angular 应用程序是旅程(您的应用程序显然会有所不同)

所以我将角度应用程序声明为模块

this.journey = angular.module('journey', [
    'ngResource',
    'ngRoute'
  ]);

然后我有一个文件constants.js.erb,我在其中声明我的模板

journey.constant('INDEX_TEMPLATE', '<%= asset_path('journeys/journey_index.html')%>');
journey.constant('EDIT_JOURNEY_TEMPLATE', '<%= asset_path('journeys/journey_edit.html') %>');

最后在我的服务中,我使用声明为模板 url 的常量

journey.config([
    '$routeProvider',
    '$locationProvider',
    'INDEX_TEMPLATE',
    'EDIT_JOURNEY_TEMPLATE',
    function ($routeProvider, $locationProvider, INDEX_TEMPLATE, EDIT_JOURNEY_TEMPLATE) {
      $locationProvider.html5Mode(false);
      return $routeProvider.when('/', {
        templateUrl: INDEX_TEMPLATE,
        controller: 'JourneyIndexController'
      })
     }
   ])

这样我就不必担心文件在哪里或者 rails 是如何组织路由的。

希望这可以帮助

于 2013-09-22T14:33:33.767 回答