我在Heroku上有一个应用程序,它在我的开发环境中正常工作。但是,在Heroku上,我的一个javascripts文件是空的。它是bootstrap文件,由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资产设置
Production.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文件:
的application.js
//= require twitter/bootstrap
的Gemfile
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
我无法弄清楚可能有问题的部分。 Heroku的?铁路?链轮? CONFIGS?
我已经尝试更改了很多production.rb设置,包括注释掉action_dispatch.x_sendfile_header。
感谢您的帮助
答案 0 :(得分:2)
我相信这是设计的。在查看实际的bootstrap文件(我在这里看:https://github.com/seyhunak/twitter-bootstrap-rails/blob/master/vendor/assets/javascripts/twitter/bootstrap.js)时,其中没有实际的js。它只是通过“// = require”行向sprockets发出信号,它应该引入和编译的.js文件。在开发模式中,链接的这些注释隐藏在前端,因为它们实际上只是sprockets / rails的实现细节。
总而言之,当您尝试查看(app / lib / vendor)/ assets / javascript文件时,除了多个“// = require”之外,该文件在前端看起来都是空的因为rails / sprockets在前端隐藏了您的实现细节。
答案 1 :(得分:0)
为什么要直接访问单个文件?在生产中,管道的想法是将application.js清单文件中引用的所有单个文件合并到一个application.js文件中。
您的代码只应通过javascript_include_tag
引用application.css文件。在开发过程中,这将显示包含的所有文件,如果您将页面源视为单独的js文件,而在生产中您应该看到的是单个js文件,如
/assets/application-46187b46e120ec79eabd082567660eb1.js
答案 2 :(得分:-1)
我在Heroku上的资产组遇到了一些问题。尝试将它移到它之外,看看它是否有效。