我正在使用Rails 3.1 w/asset pipeline,phusion 3.0.x和apache 2.2.17.
在http://guides.rubyonrails.org/asset_pipeline.html的配置文档中,在4.1.1节中,它指出我需要在我的apache配置中添加一个部分:
<LocationMatch "^/assets/.*$">
# Some browsers still send conditional-GET requests if there's a
# Last-Modified header or an ETag header even if they haven't
# reached the expiry date sent in the Expires header.
Header unset Last-Modified
Header unset ETag
FileETag None
# RFC says only cache for 1 year
ExpiresActive On
ExpiresDefault "access plus 1 year"
</LocationMatch>
Run Code Online (Sandbox Code Playgroud)
我一直认为Phusion Passenger刚刚"处理"了这个......或者我是不是在忽视RTFM?如果我想利用指纹识别,我是否需要将其添加到apache配置中?
apache ruby-on-rails passenger ruby-on-rails-3 asset-pipeline
即使我重新启动开发服务器,也不会重新生成我的js.erb文件.有没有办法让我每次重新启动服务器时强制资产管道重新生成所有的javascript资产?
如果我更改了实际的.js.erb源文件,那么它会重新编译,但代码从数据库中提取,读取可能在服务器重新启动之间更改的种子数据.
在生产模式下试用我的Rails 3.1应用程序(Debian 6,Ruby 1.9.2,Passenger).我尝试使用IE 6和IE 7,并且一些资产未正确加载.开发模式下一切正常.
有些css&js没有正确加载,你正在编译所有文件.特别是我遇到了下拉菜单问题(jquery superfish菜单).在生产和开发中,IE8,IE 9,Firefox,Chrome中的一切都运行良好.该问题仅出现在生产中的IE 6和7中.
尝试清除缓存(在浏览器和服务器上).重新编译资产.什么都看不到帮助.
有没有人碰到任何东西 - 像那样?
刚刚将应用程序从rails 3.0.9升级到3.2.1,当我运行时bundle exec rake assets:precompile我得到错误,这很好但是回溯并没有告诉我在我的css或scss文件中语法问题来自哪里.我尝试greping"0ee5c0e69c92af0",但该字符串没有出现在我的项目中.
bundle exec rake assets:precompile:all RAILS_ENV=production RAILS_GROUPS=assets --trace
** Invoke assets:precompile:all (first_time)
** Execute assets:precompile:all
** Invoke assets:precompile:primary (first_time)
** Invoke assets:environment (first_time)
** Execute assets:environment
** Invoke tmp:cache:clear (first_time)
** Execute tmp:cache:clear
** Execute assets:precompile:primary
rake aborted!
Invalid CSS after "...0ee5c0e69c92af0": expected ";", was ".png;"
Run Code Online (Sandbox Code Playgroud)
有没有办法从预编译过程中获得更好的错误消息或堆栈跟踪?有没有其他方法可以编译我的css.erb文件来检查语法没有这个任务?
我正在编写一个可安装的Rails 3.1引擎,它可以为主应用程序添加功能(即它不是孤立的).引擎的JS依赖于jQuery,jQueryUI,DataTables和JSTree(以及其他库),因此引擎的清单看起来像:
// my_engine.js
//= require jquery
//= require jquery_ujs
//= require jquery-ui
//= require jstree_pre1.0_fix_1/jquery.jstree.js
//= require_tree .
Run Code Online (Sandbox Code Playgroud)
然后我可以使用以下方法有条件地将此文件加载到主应用程序的布局中:
<%= javascript_include_tag 'application' %>
<%= javascript_include_tag 'my_engine/my_engine' if user_logged_in? %>
Run Code Online (Sandbox Code Playgroud)
但是,如果主应用程序的清单已经包含其中一个依赖项(很可能是jQuery和jQuery_UJS),那么这些依赖项将被加载两次.我会看到类似的东西:
<script src="/assets/jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script>
...
<script src="/assets/application.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery-ui.js?body=1" type="text/javascript"></script>
<script src="/assets/jstree_pre1.0_fix_1/jquery.jstree.js?body=1" type="text/javascript"></script>
...
<script src="/assets/cms/application.js?body=1" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)
Sprocket的require指令只需要在同一个捆绑包中的资产,但在这里我使用两个捆绑包.为了使其他开发人员能够实现我的引擎,我希望他们能够包含一行来检测是否已经包含共享依赖项.有没有很好的方法使用Sprockets这样做?
ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 sprockets asset-pipeline
我被卡住了!xD我一直在研究Rails项目,但是在使用相对路径访问我的资产时遇到了问题.当我处理控制器和模型时,我的一个朋友正在研究html/css方面的事情.我的朋友最近给了我一批以下列方式构建的文件:
app/assets/images/*.jpg
app/assets/stylesheets/*.css
app/assets/javascripts/*.js
app/assets/fonts/*.* (+some more css files in here)
Run Code Online (Sandbox Code Playgroud)
在我的app/views/layouts目录中,我有一个名为final.html.erb的布局,用于我的整个webapp.我还有1页(html正文内容),我正在尝试使用名为final_page.html.erb的app/views/pages中的此布局进行渲染...必要的路由到位才能加载页面; 但是,它只加载final_page.html.erb的上下文(没有图像,样式或字体).当我进入控制台并键入"rails server"并访问localhost:3000时,页面显示...裸体lol.控制台输出以下内容:
Started GET "/" for 127.0.0.1 at 2012-07-28 21:15:02 -0700
Connecting to database specified by database.yml
Processing by PagesController#final_page as HTML
Rendered pages/final_page.html.erb within layouts/final (8.4ms)
Completed 200 OK in 82ms (Views: 81.0ms | ActiveRecord: 0.0ms)
Started GET "/assets/stylesheets/style.css" for 127.0.0.1 at 2012-07-28 21:15:04 -0700
ActionController::RoutingError (No route matches [GET] "/assets/stylesheets/style.css"):
actionpack (3.2.6) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
actionpack (3.2.6) lib/action_dispatch/middleware/show_exceptions.rb:56:in `call'
railties (3.2.6) lib/rails/rack/logger.rb:26:in `call_app'
railties (3.2.6) lib/rails/rack/logger.rb:16:in `call' …Run Code Online (Sandbox Code Playgroud) 我将config/environments/development.rb复制到config/environments/ci.rb.
当我使用RAILS_ENV = development运行时,资产搜索路径包括我的gem供应商目录,特别是jquery-ui-rails.但是,当我使用RAILS_ENV = ci运行时,它没有.
从控制台,Rails.application.config.assets.paths通过开发评估到以下内容
irb(main):002:0> Rails.application.config.assets.paths
=> ["/var/www/ci/conflux/app/assets/images",
"/var/www/ci/conflux/app/assets/javascripts",
"/var/www/ci/conflux/app/assets/stylesheets",
"/var/www/ci/conflux/vendor/assets/stylesheets",
"/opt/comcast/ruby1.9.3/lib/ruby/gems/1.9.1/gems/jquery-rails-1.0.19/vendor/assets/javascripts",
"/opt/comcast/ruby1.9.3/lib/ruby/gems/1.9.1/gems/jquery-ui-rails-1.0.0/vendor/assets/images",
"/opt/comcast/ruby1.9.3/lib/ruby/gems/1.9.1/gems/jquery-ui-rails-1.0.0/vendor/assets/javascripts",
"/opt/comcast/ruby1.9.3/lib/ruby/gems/1.9.1/gems/jquery-ui-rails-1.0.0/vendor/assets/stylesheets"]
Run Code Online (Sandbox Code Playgroud)
但对于ci我只得到以下内容:
irb(main):002:0> Rails.application.config.assets.paths
=> ["/var/www/ci/conflux/app/assets/images",
"/var/www/ci/conflux/app/assets/javascripts",
"/var/www/ci/conflux/app/assets/stylesheets",
"/var/www/ci/conflux/vendor/assets/stylesheets",
"/opt/comcast/ruby1.9.3/lib/ruby/gems/1.9.1/gems/jquery-rails-1.0.19/vendor/assets/javascripts"]
Run Code Online (Sandbox Code Playgroud) jquery-ui ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 asset-pipeline
的application.js
//= require jquery
//= require jquery_ujs
//= require_tree .
//= require active_scaffold
Run Code Online (Sandbox Code Playgroud)
在客户端
<script src="/assets/jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery-ui.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery-ui-timepicker-addon.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery/active_scaffold.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery/jquery.editinplace.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery/date_picker_bridge.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery/draggable_lists.js?body=1" type="text/javascript"></script>
<script src="/assets/active_scaffold.js?body=1" type="text/javascript"></script>
<script src="/assets/application.js?body=1" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)
/assets/jquery.js?body=1包含v1.9.0的jquery,但我希望有一个1.6版本的jquery.
如何使用rails资产管道定义jquery版本?
我希望我的样式表保持简单的CSS,但我想使用嵌入式ruby来包含一些动态路径到图像:
.home {background: #FFF url(<%= image_path 'hippopotamus.jpg' %>) no-repeat; }
Run Code Online (Sandbox Code Playgroud)
如果我将样式表从.css更改为.css.erb,则会image_path正确解释,但在部署到生产环境时,资产管道不会处理它.如果我对路径进行硬编码,那么在生产或开发中它将是错误的,因为它们以不同的方式加载资源.
我该如何解决这个问题?
我想用一些Grunt任务来交换/增强资产管道.有没有办法可以将grunt集成到我的构建过程中?