生产中没有服务的铁路资产(另一个资产问题)

我正在使用apache 2.2.15乘客5.1.2导轨4.2.6 ruby​​ 2.3.3

在rails日志中,我得到了

(No route matches [GET] application-xxxxx.js 

以及

 (No route matches [GET] application-xxxxx.css 

我可以在public / assets目录中找到资产。

我的清单:

应用程序/资产/样式表/ application.css.less:

 /* *= require jquery-ui *= require font-awesome *= require bootstrap_and_overrides *= require awesome-bootstrap-checkbox *= require lists *= require mailgroups *= require general *= require colors *= require print *= require loader *= require tooltips *= require_self *= require_tree . */ 

应用程序/资产/ JavaScript的/ application.js中

 //= require jquery //= require jquery.turbolinks //= require jquery_ujs //= require jquery-ui //= require twitter/bootstrap //= require bootstrap //= require turbolinks //= require twitter/bootstrap/rails/confirm //= require_self //= require_tree . 

我在config / production.rb中设置(在此处关于SO的其他答案)

 config.serve_static_files = true 

在app / views / layouts / application.html.erb中

  "reload" %>  "reload" %> 

我迷路了,谢谢你的帮助。

更新 :我不使用Capistrano,只需手动部署。

在rails控制台中运行Rails.application.config.assets.paths时,我得到以下内容:

  => ["/var/www/myappname/app/assets/fonts", "/var/www/myappname/app/assets/images", "/var/www/myappname/app/assets/javascripts", "/var/www/myappname/app/assets/stylesheets", "/var/www/myappname/vendor/assets/fonts", "/var/www/myappname/vendor/assets/images", "/var/www/myappname/vendor/assets/javascripts", "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/twitter-bootstrap-rails-confirm-1.0.6/vendor/assets/javascripts", "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/local_time-1.0.3/app/assets/javascripts", "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/font-awesome-rails-4.7.0.1/app/assets/fonts", "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/font-awesome-rails-4.7.0.1/app/assets/stylesheets", "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/less-rails-fontawesome-0.5.1/vendor/assets/fonts", "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/less-rails-fontawesome-0.5.1/vendor/assets/stylesheets", "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/less-rails-bootstrap-3.3.5.0/app/assets/fonts", "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/less-rails-bootstrap-3.3.5.0/app/assets/javascripts", "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/less-rails-bootstrap-3.3.5.0/app/assets/stylesheets", "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/twitter-bootstrap-rails-3.2.0/app/assets/fonts", "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/twitter-bootstrap-rails-3.2.0/app/assets/images", "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/twitter-bootstrap-rails-3.2.0/app/assets/javascripts", "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/twitter-bootstrap-rails-3.2.0/app/assets/stylesheets", "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/twitter-bootstrap-rails-3.2.0/vendor/assets/stylesheets", "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/jquery-turbolinks-2.1.0/vendor/assets/javascripts", "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/jquery-ui-rails-6.0.1/app/assets/images", "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/jquery-ui-rails-6.0.1/app/assets/javascripts", "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/jquery-ui-rails-6.0.1/app/assets/stylesheets", "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/jquery-rails-4.2.2/vendor/assets/javascripts", "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/coffee-rails-4.0.1/lib/assets/javascripts", "/var/www/myappname/vendor/bundle/ruby/2.2.0/gems/turbolinks-source-5.0.0/lib/assets/javascripts", #, #, #, #] 

我的config / initializers / assets.rb已经包含这个:

 Rails.application.config.assets.precompile += ['.svg', '*.eot', '*.woff', '*.woff2', '*.ttf', '*.otf', '*.js', '*.css'] 

这是我的建议。

我添加了以下可能有助于找到解决方案的资源。

https://launchschool.com/blog/rails-asset-pipeline-best-practices

https://railsapps.github.io/rails-javascript-include-external.html

https://reinteractive.com/posts/116-12-tips-for-the-rails-asset-pipeline

我阅读了搜索rails资产管道可以找到的所有指南,但我不会将它们全部链接

我的建议是使用Chrome开发者工具检查application.css和application.js的指纹(通过进入任何屏幕元素,使用f12打开开发人员工具箱并检查任何div或任何js文件的任何样式)。 您需要检查文件的指纹版本,然后使用文本编辑器打开该版本,并检查文件指纹版本中加载的内容。

如果您的文件(例如ex.user.js)加载在清单的底部,您应该很容易在指纹application.js的底部找到它。

如果要更新此文件,则可以运行

rake assets:precompile

这将仅在开发中预编译资产,用于指定环境所需的生产。 它将使用您完成的编辑更改指纹文件application.css和application.js。

 RAILS_ENV=production bundle exec rake assets:precompile 

您还可以在以下地址localhost:3000/assets/yourjsfile.js检查文件,或者按照localhost:3000/assets/application-yourfingerprint.js检查指纹版本。

如您所见,许多文件都包含在该public / assets文件夹中,您可以使用rake assets:clean删除它们rake assets:clean-rf public/assets然后运行rake assets:precompile ,它将再次预编译资产。

如果不包含任何内容,则表示您的application.js未加载。 当我在不同的post上阅读时,您可以尝试以下内容:

  1. 使用以下代码config/initializers/assets.rb文件包含在config/initializers/assets.rb中:

     Rails.application.config.assets.precompile += %w( user.js ) 
  2. 启动rails c并运行Rails.application.config.assets.paths此命令将以红色显示自动包含的路径,例如App,Lib和Vendor中的路径,绿色显示通过添加内部config/application.rb包含的路径config/application.rb以下代码添加新路径

     config.assets.paths << Rails.root.join("vendor","assets", "fonts") 

我在过去做的另一个错误是没有使用正确的sprockets语法,你可以在以下链接检查它(我使用的是require_user而不是require用户):

https://github.com/rails/sprockets#sprockets-directives

另一个问题是我在App / assets / javascript下有两个名为user(user.coffee和user.js)的文件。 第一个加载的是user.coffee,它是空的。