部署ruby-on-rails + angularJS项目

时间:2015-08-18 16:52:13

标签: ruby-on-rails ruby angularjs ruby-on-rails-4 asset-pipeline

尝试部署rails + angular项目。

已解决:结果(来自浏览器日志):

1)其中一个js文件出现小错误。

2)主要模块由于依赖性混乱而未加载,但是错误消息是针对其中一个引导程序文件(?!)。重新安装了twitter-bootstrap gem。

但是,我仍然不理解为什么项目在开发中工作而且在生产中没有问题。

正常运行rails s -e production,导致回答布局, assets / javascripts文件夹被加载(绑定事件到窗口onload - 工作)。但所有的凉亭插件,包括角形,jquery等都无法正常工作。 heroku上的本地问题相同。资产编译为tmp / ...文件夹。部署成功结束,但角度部分不起作用(日志中没有错误),以及jquery和所有插件。

在配置/应用程序中:

config.serve_static_files = true
config.less.paths << Rails.root.join('app', 'assets', 'bower_components')
config.assets.paths << Rails.root.join('app', 'assets', 'bower_components')
config.assets.initialize_on_precompile = true
config.assets.precompile = ['*.js', '*.css', '*.css.erb', '*.eot', '*.svg', '*.ttf', '*.woff', '*.woff2']

在config / environments / production中:

config.assets.js_compressor = :uglifier
config.assets.js_compressor = Uglifier.new(:mangle => false)
config.assets.digest = true
config.assets.compile = true

尝试bundle exec rake:assets:precompile RAILS_ENV=production:没有帮助。

我认为加载插件(bower文件夹,bootstrap,jquery等)作为主文件application.js查询并成功呈现(日志)有问题,但不能作为插件工作似乎没有找到。

的application.js:

//= require jquery
//= require jquery_ujs
//= require twitter/bootstrap
//= require angular
//= require angular-rails-templates
//= require angular-devise
//= require angular-ui-router
//= require angular-route
//= require angular-bootstrap
//= require angular-touch
//= require ng-tags-input
//= require angular-loading-bar
//= require angular-xeditable
//= require ng-file-upload-shim
//= require ng-file-upload
//= require Buttons
//= require x-editable
//= require angular-ui-notification
//= require_tree ../templates
//= require_tree .

angular.module('boo', ['boo-factories', 'boo-controllers', 'ui-notification', 'ngTagsInput', 'angular-loading-bar', 'ui.router', 'ui.bootstrap', 'templates', 'Devise', 'ngFileUpload', 'xeditable', 'bootstrapLightbox']);

依旧......

2 个答案:

答案 0 :(得分:0)

我认为正在发生的事情是,由于您正在编译资产以及创建角度应用程序的方式,因此某些角度代码会分散开来,而不会被资产管道或浏览器理解。

快速但又脏的解决方案(因为加载页面需要更长时间)是:

  1. 编辑config / environments / production.rb,评论此行:

    config.assets.js_compressor =:uglifier

  2. 使用以下命令清理生产环境中的资产管道:

    RAILS_ENV =生产佣金资产:干净

  3. 最后,再次启动服务器:

    rails s -e production

答案 1 :(得分:0)

你是否有任何理由决定在application.js中加载你的模块?我会将其外部化为另一个名为app.js的文件,并确保在工厂,控制器,服务等之前将其加载到树中。

我会遵循给出的建议,确保您的资产在生产中不会缩小。这确实有些奇怪。