使用单独的脚本文件和 Rails 资产

Posted

技术标签:

【中文标题】使用单独的脚本文件和 Rails 资产【英文标题】:Using individual script files and rails assets 【发布时间】:2015-12-21 01:19:11 【问题描述】:

我的应用使用旧版本的 jquery,我想在我的应用中使用新的 jquery 版本做一个 POC,以展示一些好处,同时重写一些后端。

所以我所做的是向我的控制器添加了一个名为 poc 的布局,并从 poc 布局中删除了应用程序 javascript 标记。但我把这个留在了poc 布局中:

= yield :footer_js

这样我就可以在单个页面上加载 javascript,我这样做了:

- content_for :footer_js do
  = javascript_include_tag 'new_jquery'

在我的新页面上,只加载了 jquery,我将其添加到 app/assets/javascript/poc/new_jquery.js,它在我的本地机器(开发环境)上运行良好。

但是,一旦我将其部署到生产环境中,情况就完全不同了,什么都没有加载。我的脚本位于app/assets/javascript/poc,下面是new_jquery.js

然后是app/assets/javascript/poc/servicesapp/assets/javascript/validations 下的文件,我分别在视图中加载它们。

问题: 我这样做对吗?如果是的话,我如何让这些文件在资产管道的生产中工作?或者,如果我做错了,那么在生产环境中测试具有独立依赖项的独立页面的正确方法是什么?

【问题讨论】:

你试过javascript_include_tag 'poc/new_jquery'吗? 当我使用new_jquery 时,它已经在本地主机上工作了我很确定这不会对编译产生任何影响,但我会试一试。有什么理由建议这样做? 是的,如果它可以在 localhost 上运行,这没什么意义,我只是想看看是否会弹出一些东西。我实际上打赌生产中的预编译问题(文件未预编译,由于production.rb 或诸如此类的一些错误配置而未找到)。您是否使用rake assets:precompile 在本地编译资产?不是,你可以试试吗?另外,当您加载生产站点时,您的浏览器是否会针对该特定 js 文件收到 404 错误? 【参考方案1】:

我所做的正如答案中所描述的那样,我最终使用了新布局,但是我没有在视图中单独包含 javascript 文件,而是在 app/assets/javascript 旁边的 application.js 中添加了 poc.js,并从 poc.js 引用了我需要的所有 js 文件,并将 poc.js 包含在布局中。

我还在 application.rb 中添加了poc.js

Rails.application.config.assets.precompile += ['admin.js', 'admin.css', 'poc.js']

效果很好!

【讨论】:

以上是关于使用单独的脚本文件和 Rails 资产的主要内容,如果未能解决你的问题,请参考以下文章

Rails 应用程序 - 使用 Cloudfront 和 Heroku 进行资产交付

使用 Rails 3.1 资产管道有条件地使用某些 css

如何将dojo工具包与rails 3.1资产管道和coffeescript一起使用?

如何调试速度慢得无法忍受的 Rails 资产预编译

Rails 3.1 资产管道供应商/资产文件夹组织

rails 3.1资产管道路由错误