问题标签 [jammit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1486 浏览

ruby-on-rails - 通过更改 ActionController::Base#page_cache_directory 在 Heroku 上使用 Jammit 进行静态资产缓存

我正在尝试使用 Jammit 为部署在 Heroku 上的 Rails 应用程序打包 CSS 和 JS,由于 Heroku 的只读文件系统,它不能开箱即用。我看到的每个关于如何执行此操作的示例都建议提前构建所有打包的资产文件。由于 Heroku 的基于 Git 的部署,这意味着每次这些文件更改时您都需要对存储库进行单独的提交,这对我来说不是一个可接受的解决方案。相反,我想更改 Jammit 用于将缓存包写入#{Rails.root}/tmp/assets(通过更改ActionController::Base#page_cache_directory)的路径,该路径可在 Heroku 上写入。

我不明白的是如何使用缓存文件而不每次都碰到 Rails 堆栈,即使使用缓存包的默认路径也是如此。让我解释一下我的意思:

当您使用 Jammit 的帮助程序包含一个包时,它看起来像这样:

生成此脚本标记:

当浏览器请求这个 URL 时,实际发生的是它被路由到Jammit::Controller#package,它将包的内容呈现给浏览器,然后将缓存的副本写入到#{page_cache_directory}/assets/application.js。这个想法是这个缓存文件建立在第一个请求上,后续请求应该直接为缓存文件提供服务,而不会影响 Rails 堆栈。我查看了 Jammit 代码,但不知道这是怎么发生的。是什么阻止了后续请求/assets/application.js简单地再次路由Jammit::Controller并且从不使用缓存文件?

我的猜测是,我看不到的某个地方有一个 Rack 中间件,如果文件存在,它会为文件提供服务,如果不存在,则将请求转发到控制器。如果是这样,那代码在哪里?以及在更改时它会如何工作ActionController::Base#page_cache_directory(有效地更改 Jammit 写入缓存包的位置)?由于#{Rails.root}/tmp位于公共文档根目录之上,因此没有映射到该路径的 URL。

0 投票
1 回答
723 浏览

ruby-on-rails - 使用 Jammit gem 为 Rails 编译 javascript 模板?

我们在 Rails (3.0.3 / 1.9) 上使用 Jammit 进行静态压缩以及它提供的所有其他前端好东西。我正在尝试使用 Javscript 模板来替换一些丑陋的前端代码,但看起来默认的 JST 编译器无法处理 Windows 换行符:

assets.yml 文件:

当我将 _topicPreview.jst 全部放在一行上时,它编译得很好:

页面加载,我有可用的 JST._topicPreview([JSON version of topic]) 方法。美丽的。

JST 的一半吸引力在于可读性/可维护性,所以我希望我的 JST 有正确的格式。一旦我在 JST 文件中添加换行符,页面就会Uncaught SyntaxError: Unexpected Token ILLEGAL抛出window.JST['_topicPreview'] = template('...[the escaped JST file]...')

在代码跟踪中,我可以看到它解析和转义单引号,所以我很惊讶它无法处理换行符。

有没有其他人遇到过这个问题?有没有比将一些额外的字符串替换到模板生成代码中更干净的解决方法?

Meta:我对 javascript 模板还很陌生,但是它们应该有自己的 StackOverflow 标签吗?

编辑

看起来这是一个已知问题,有待合并到 gem 中的未决修复。

Jammit JST 编译器中的 Windows 换行符

0 投票
2 回答
999 浏览

jquery - Jammit compression works in dev mode, but not as compressed JS

My Rails app is fairly progressed now, and I want to compress the included JS files (Aloha Editor with plugins + Gritter, making up multiple files with over 1MB of JS) properly. I have decided for Jammit, because of its fine Rails integration. Here is my config/assets.yml:

For explanation: aloha.js is an extended jQuery 1.4.2 lib, and the files in /javascripts/.js and /gritter/.js are mostly dependent on it (jQuery). I am including the tags in my view code with

straightforward.

When switched to dev mode (assets.yml has package_assets: on), Jammit leaves the JS files alone and embeds all of them, one by one, and my app is just fine.

However, when in production mode (env = :production, or assets.yml has package_assets: always), Jammit creates a compressed JS file of roughly 700kB (wow, that's a fat monster) which embeds correctly, but I get a JS error "jQuery is not defined" on page load. My first guess would be that the order of JS files is changed during compilation, even though it should not?

One more thing: Leaving the compressor at default (yui) causes even worse JS errors on loading.

Can someone help me, please?

0 投票
1 回答
481 浏览

javascript - Rails3 视图 - JS 模板目录结构

我真的不喜欢在公用文件夹中有一个重复的目录结构来包含这里建议的 Javascript 模板。我要潜入一个项目。任何可以说服我不要将我所有的 JS 观点与我的其他观点相提并论的人,请提出不这样做的理由。我的想法:

无论您是使用 Backbone、Jammit 模板还是任何其他 Javascript 来创建数据视图,理想情况下,这些代码不应该位于 /app/views/[object] 目录中吗?如果我们正在设计一个具有多种表示数据的方式的应用程序,那么所有这些视图不应该都存在于同一个地方吗?

当然,设置路由并让 rails 为文件提供服务是没有意义的,但是如果我们使用 Jammit/Closure/其他 JS 压缩工具,那么我们已经在目录结构和 JS 之间添加了一层处理我们传输给客户。这不应该意味着我们可以将模板放在对代码组织/维护最有意义的地方吗?

谢谢。

0 投票
1 回答
863 浏览

ruby-on-rails - 如何使用 Jammit + Heroku + Cloudfront 提供 GZipped 资产

我制作了一个 webapp 并将其部署到 Rails 2.3 中的 Heroku

我还压缩了所有文件并上传到 Cloudfront。

现在 Heroku 正在正确地提供所有静态资产,但不是 Jammit 创建的 .gz 版本。

否则我的 PageSpeed 会非常出色,但由于 Gzip 压缩,它短了 10 个点。

如果有人能告诉我如何利用 GZip 压缩,那将有很大帮助。

我的网站位于 www.weddings9.com,以防您想查看 gz 资产。

0 投票
2 回答
1322 浏览

javascript - 如何有效地使用 Jasmine 测试通过 Jammit 打包的 javascript 资产?

我有一个使用Jammit组合 javascript 资产的 rails 应用程序,我想使用Jasmine对我的 javascript 进行 BDD 样式测试。我想知道是否有人对从 Jasmine 中访问 Jammit 生成的“pacakges”有任何建议?

问题是 Jasmine 是通过在磁盘上定义要测试的 JS 文件列表来配置的,然后它将这些文件包含在自己的测试运行器页面中,该页面在浏览器中加载和运行。

在将它们与 Jammit 打包之前,我可以在 jasmine.yml 配置文件中引用每个单独的 JS 文件......但是,Jammit 已经在为我处理文件之间的依赖关系,更重要的是,我还需要访问Jammit 生成的已编译javascript 模板。

我也可以手动运行 Jammit 以首先生成已编译的资产,然后运行 ​​Jasmine,但我最终不得不在每次测试运行之前手动重新生成资产以测试更改,这将严重限制快速测试 -驱动型工作流程。

我想知道我是否可以:

  • 从 Jasmine 的机架服务器中安装 Jammit 控制器,以便它可以提供来自 Jasmine 的包?这基本上与 Jammit 在 Rails 的开发环境中所做的工作方式相同。
  • 在执行测试之前以某种方式连接到 Jasmine 以在每个页面加载时打包资产?这会更慢,但会为我节省一步并确保事情是最新的。

有什么建议么?我才刚刚开始,所以我可能会做错一切。任何建议将不胜感激。:-)

谢谢!-约翰

0 投票
1 回答
337 浏览

ruby-on-rails-3 - jammit-s3 与 aws-s3 冲突

如果我有两个宝石,我会收到错误:

当我使用 Paperclip 上传到 S3 并将我的 jammit 资产上传到 S3 时,我需要两者。怎么解决?

0 投票
2 回答
1124 浏览

ruby-on-rails - windows x64 上的 jammit gem 问题

可能重复:
Ruby 1.9 - 没有这样的文件来加载“win32/open3”

我遇到了 jammit gem 的问题。当我运行“rake”时,我收到一条消息告诉我,有一个问题 - 消息的一部分:

$ rake -t (in c:/Ruby187/test) rake 中止了!没有要加载的文件 - win32/open3 c:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.6/lib/active_support/dependencies.rb:239 :in require' c:/Ruby187/lib /ruby/gems/1.8/gems/activesupport-3.0.6/lib/active_support/dependencies.rb:239 :inrequire'

有关环境的一些信息:操作系统:Windows 7 64bit Ruby 1.8.7 GEMS:jamit (0.6.0)closure-compiler (1.1.1) yui-compressor (0.9.6)

如果我从 Gemfile 中删除 jammit,命令 rake -t 运行没有问题。

感谢您的任何建议!

0 投票
2 回答
602 浏览

ruby-on-rails - Heroku Jammit GEM 与最新的 Heroku Gem

我一直在使用以下 heroku jammit gem 进行部署:

在夜间部署期间,heroku 让我更新了我的 heroku gem,然后破坏了这个 jammit gem。我现在收到以下错误:

在 heroku_jammit gem '/lib/heroku_jammit.rb'

有关如何更新此行以使用新的 heroku gem 的任何建议?

谢谢

0 投票
2 回答
2063 浏览

ruby-on-rails - 在 heroku 上部署机车 CMS 时出现 Jammit 警告

我正在尝试根据他们的安装指南http://www.locomotivecms.com/support/installation/heroku在 heroku 上部署机车 CMS 。我将资产上传到 S3 存储桶。因此,在 localhost 上它工作正常,但是当访问 heroku 上的站点时,会显示一条错误消息:

我检查了heroku日志:

看来,jammmit 和资产存在问题。

直到现在我还没有在谷歌上找到任何有用的提示。任何想法如何解决这个问题?

更新:我调整了 mongoid.yml 但仍然得到与上述相同的错误消息。我再次检查了日志:

我想这次是下面一行的问题:

我想我需要再次配置我的 heroku 登录名和密码。让我们试试...

更新2:仍然不起作用。在我的 mongoid.yml 配置下方

我在 config/initializers/locomotive.rb 中的设置