生产中没有服务的铁路资产(另一个资产问题)
我正在使用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上阅读时,您可以尝试以下内容:
-
使用以下代码
config/initializers/assets.rb
文件包含在config/initializers/assets.rb
中:Rails.application.config.assets.precompile += %w( user.js )
-
启动
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,它是空的。