【问题标题】:Angularjs and Rails is not working in productionAngularjs 和 Rails 不能在生产中工作
【发布时间】:2014-09-13 00:16:53
【问题描述】:

我收到以下错误,我不明白为什么。我尽力更改/检查错误的来源,但对我来说一切似乎都是正确的。而且这个错误只发生在production,在development它工作正常。

#error
Uncaught Error: [$injector:modulerr] Failed to instantiate module recipeApp due to:
Error: [$injector:nomod] Module 'recipeApp' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.

#app.js
var mod = angular.module('recipeApp',[]);

#application.js
//= require jquery
//= require jquery_ujs
//= require pixel-admin.min
//= require app

#config/initializers/productio.rb
config.assets.compile = false
config.assets.precompile =  ['*.js', '*.css']
config.assets.js_compressor = Uglifier.new(:mangle => false)
config.assets.js_compressor = :uglifier


#app/views/layout/application.html.erb
<body class="theme-default no-main-menu main-navbar-fixed" ng-app="recipeApp">

当我通过 firebug 检查源代码时,我可以在 jshtml 中看到 recipeApp

我正在使用

  • Rails 4.1.5
  • Angularjs 1.2.13

更新

对于路由,我使用的是 ui.router,但我如何尝试添加它,但还是一样

#app/views/layouts/application.html.erb
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.4/angular.js"></script>
<script src="//angular-ui.github.io/ui-router/release/angular-ui-router.js"></script> 

在我的

app/assets/javascripts/app.js

'use strict';
angular.module('recipeApp',["ui.router"]);

【问题讨论】:

    标签: ruby-on-rails angularjs production-environment ruby-on-rails-4.1


    【解决方案1】:

    我也遇到了这个问题,并在这里找到了解决方案:https://teamgaslight.com/blog/4-lessons-learned-doing-angular-on-rails。想我会分享给遇到这个问题的任何人,即使这个问题已经相当老了。

    生产中的 Rails 会自动缩小影响 Angular 的变量。

    所以在 config/environments/production.rb 中,在 end 之前添加这一行:

     config.assets.js_compressor = Uglifier.new(mangle: false)
    

    您的应用需要在 Rails 4+ 上运行

    【讨论】:

    • 嗯,它有效.. 至少它不再抛出错误了.. 但代价是什么?要加载的数据多 50%?
    【解决方案2】:

    未捕获的错误:[$injector:modulerr] 当您未在较新版本的 angular 中提供 ngRoute 依赖项时,会发生此错误。

    您必须在模块中提供 ngRoute 依赖项,因为它在新的 Angular 版本中是单独的模块。

    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.13/angular-route.min.js"></script>
    
    var app = angular.module('recipeApp', ['ngRoute']);
    

    【讨论】:

    • 感谢您的回答,我试过了,但仍然遇到同样的错误。但是我使用'ui-router',但即使添加了它,仍然是同样的错误,请查看我的更新答案
    猜你喜欢
    • 1970-01-01
    • 2015-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-08
    • 1970-01-01
    • 2019-04-18
    • 2017-04-14
    相关资源
    最近更新 更多