0

我在 Heroku 上有一个应用程序,它可以在我的开发环境中正常工作。但是,在 Heroku 上,我的 javascripts 文件之一是空的。它是 bootstrap_for_rails gem 提供的引导文件

/assets/twitter/bootstrap-a43574b1a9d30434438a56d88ff10a70.js?body=1
 ==> Returns empty file???

/assets/twitter/bootstrap-a43574b1a9d30434438a56d88ff10a70.js
 ==> Returns the js file correctly

我正在使用带有资产管道的 Rails 3.2,并在 Heroku 上使用 Cedar Stack。

这是我的 production.rb 资产设置

生产.rb

config.serve_static_assets = true

config.assets.debug = true

config.assets.compress = false

config.assets.compile = true

config.assets.digest = true

# Specifies the header that your server uses for sending files
# config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache
config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx

非常简单的 application.js 文件:

应用程序.js

 //= require twitter/bootstrap

宝石文件

 group :assets do
   gem 'sass-rails',   '~> 3.2.3'
   gem 'coffee-rails', '~> 3.2.1'
   gem 'uglifier', '>= 1.0.3'
   gem 'twitter-bootstrap-rails', :git => 'https://github.com/seyhunak/twitter-bootstrap-rails.git'
 end

我无法弄清楚可能有问题的部分。赫罗库?导轨?链轮?配置?

我已经尝试更改我的大部分 production.rb 设置,包括注释掉 action_dispatch.x_sendfile_header。

谢谢你的帮助

4

3 回答 3

2

我相信这是设计使然。在查看实际的引导文件时(我在这里查看:https ://github.com/seyhunak/twitter-bootstrap-rails/blob/master/vendor/assets/javascripts/twitter/bootstrap.js ),没有里面有实际的js。它只是通过“//= require”行向 sprockets 发出信号,它应该拉入哪些 .js 文件并一起编译。在开发模式下,这些 sprocket 的注释隐藏在前端,因为它们实际上只是 sprockets/rails 的实现细节。

因此,总而言之,当您尝试查看一个只包含多个“//= require”的 (app/lib/vendor)/assets/javascript 文件时,该文件在前端将显示为空,因为 rails/ sprockets 在前端隐藏了你的实现细节。

于 2012-04-25T18:20:03.903 回答
0

为什么要直接访问单个文件?在生产中,管道的想法是将 application.js 清单文件中引用的所有单个文件合并到单个 application.js 文件中。

您的代码应该只通过 引用 application.css 文件javascript_include_tag。在开发中,如果您将页面的源代码作为单独的 js 文件查看,这将显示包含的所有文件,而在生产中您应该看到的是单个 js 文件,例如

/assets/application-46187b46e120ec79eabd082567660eb1.js

于 2012-04-24T16:17:49.290 回答
-1

I've had some issues with the assets group on Heroku. Trying moving it outside of it and see if that works.

于 2012-04-24T15:32:37.750 回答