如何暂时禁用Rails 3.1提供的资产管道功能?(我正在进行升级)
我试图/app/assets/images使用Dir.glob()命令从我的目录中的子目录中随机选择一个图像,然后用一个显示它image_tag.不知怎的,我无法让它发挥作用.
这是我的代码:
- @badges = Dir.glob("app/assets/images/badges/*")
= image_tag @badges.sample
Run Code Online (Sandbox Code Playgroud)
这会产生以下错误:
ActionController::RoutingError (No route matches [GET] "/assets/app/assets/images/badges/produce.png"):
Run Code Online (Sandbox Code Playgroud)
如您所见,资产管道正在目录前插入"/ assets".好吧Rails,我会在这里见到你.接下来我尝试/app/assets从查询路径中删除以使其工作并获得以下结果:
- @badges = Dir.glob("images/badges/*")
= image_tag @badges.sample
ActionController::RoutingError (No route matches [GET] "/assets"):
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?在此先感谢您的帮助!
我遇到资产管道问题,我已经有一个名为assets的资源/控制器.所以我已将assets.prefix选项更改为"/ externals".
config.assets.prefix = '/externals'
Run Code Online (Sandbox Code Playgroud)
这个简单的剂量不起作用,除非我删除:
resources: assets
Run Code Online (Sandbox Code Playgroud)
然后一切按预期工作.
我不知道如何编写测试来证明这一点,但我已经创建了一个应用程序来展示它.
https://github.com/nodrog/asset-pipeline-issue
如果你运行应用程序,并访问'/ products'都可以,那么转到routes文件并将变量create_bug更改为true.
我们查看了https://github.com/rails/rails/blob/master/actionpack/lib/sprockets/helpers/rails_helper.rb,然后在asset_path方法中添加了一个调试器.
如果你是javascript_include_tag方法中的调试器,则不调用此方法.并运行方法(:asset_path).source_location,它告诉你它是从默认路由而不是从sprockets helper调用方法.
任何帮助将不胜感激...
我有一种偷偷摸摸的感觉,我错过了一些明显的东西:
我跑了
RAILS_ENV=production bundle exec rake assets:precompile
在推送到Heroku之前预先编译我的资产.查看/public/assets显示成功编译application.js并application.css显示,但我的预编译文件没有预编译:
admin.js.coffee
blog.js.coffee.erb
[ ... several more similarly named ... ]
twitter.js.coffee.erb
Run Code Online (Sandbox Code Playgroud)
和
admin.css.less
home.css.less
public.css.less
Run Code Online (Sandbox Code Playgroud)
都缺少了/public/assets.
我认为Rails会预编译application.js/.css文件,以及其他任何不以js/css结尾的文件:
用于编译文件的默认匹配器包括application.js,application.css和所有不以js或css结尾的文件:
Run Code Online (Sandbox Code Playgroud)[ /\w+\.(?!js|css).+/, /application.(css|js)$/ ]
来自:http://guides.rubyonrails.org/asset_pipeline.html#precompiling-assets
我不想config.assets.precompile每次资产文件名更改时都手动更新.我错过了一些会让Rails预先编译这些资产的东西吗?
基于以下@Richard赫尔斯的答案,我测试了它通过创建一个独立的资产单独的清单文件(即我改名twitter.js.coffee.erb到twitter-include.js.coffee.erb并添加twitter.js一个单一//= require的原改名拉).这似乎有效.
必须有比这更简洁的方法,它似乎与上面引用的Rails指南相矛盾.该指南说,唯一不会编译的文件是.js或.css文件未命名application.我所看到的只是直接编译.js或.css(即不通过清单) - 没有别的.
我有这个Capistrano任务:
namespace :deploy do
task :precompile, :role => :app do
run "cd #{release_path}/ && RAILS_ENV=staging bundle exec rake assets:precompile --trace"
end
end
after "deploy:finalize_update", "deploy:precompile"
Run Code Online (Sandbox Code Playgroud)
我知道有,load 'deploy/assets'但我正在努力了解这里发生了什么.
我正在部署到Amazon EC2 m1.small实例,该实例显然持续50%的cpu窃取时间,经过验证top.这导致编译资产的时间增加,但看看这个:
[23.21.xxx.xx] rvm_path=$HOME/.rvm/ $HOME/.rvm/bin/rvm-shell 'ruby-1.9.3-p125' -c 'cd /home/ubuntu/apps/myapp-rails/releases/20120227020245/ && RAILS_ENV=staging bundle exec rake assets:precompile --trace'
** [out :: 23.21.xxx.xx] ** Invoke assets:precompile (first_time)
** [out :: 23.21.xxx.xx] ** Execute assets:precompile
** [out :: 23.21.xxx.xx] /home/ubuntu/.rvm/rubies/ruby-1.9.3-p125/bin/ruby /home/ubuntu/apps/myapp-rails/shared/bundle/ruby/1.9.1/bin/rake assets:precompile:all RAILS_ENV=staging RAILS_GROUPS=assets --trace
** [out :: …Run Code Online (Sandbox Code Playgroud) 在rails 3.2应用程序中,我想在将javascript_include_tag包含在文件中之前检查资产管道中是否存在javascript文件.就像是:
<% if javascript_file_exists? %>
<%= javascript_include_tag "#{controller_name}_controller" %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
我想这样做,以便缺少一个javascript文件不会导致错误.有没有办法做到这一点?
我有一个茉莉花规格设置,适用于那些不在我公司的人.我想跑
rake jasmine
Run Code Online (Sandbox Code Playgroud)
但是,当规格运行时,它们都会失败.我确信资产管道没有加载,因为我得到的错误如下:
ReferenceError: jQuery is not defined
Run Code Online (Sandbox Code Playgroud)
这是我的jasmine.yml
src_files:
- 'app/assets/javascripts/application.js'
stylesheets:
- 'app/assets/stylesheets/application.css'
# - assets/application.css
# - stylesheets/**/*.css
helpers:
- 'helpers/**/*.js'
spec_files:
- '**/*[sS]pec.js'
# src_dir
#
# Source directory path. Your src_files must be returned relative to this path. Will use root if left blank.
# Default: project root
#
# EXAMPLE:
#
# src_dir: public
#
# src_dir: app/assets
spec_dir: spec/javascripts
Run Code Online (Sandbox Code Playgroud)
这是我的application.js
// This is a manifest file that'll be compiled into including all …Run Code Online (Sandbox Code Playgroud) 我使用带有Grails 2.3.x资产管道的angular-ui-bootstrap:1.6.1插件.其中一个组件 - alert.js正在尝试加载/template/alert/alert.html,但这会解析为404.
我试过包括grails.assets.includes = [*/ .html],没有帮助.
有什么解决方法吗?无论如何让资产管道包含部分模板?
我的JavaScript正在执行两次.当我运行Chrome调试器时,我注意到单个JavaScript文件将在第一次执行代码,之后,application.js文件将再次执行代码.
我相信这种情况正在发生,因为我最近关闭了预编译,因为我遇到了Heroku的问题.在此之后,我跑了rake assets:precompile.
javascript ruby-on-rails ruby-on-rails-3 asset-pipeline turbolinks
我正在从webarch模板开始开发rails应用程序.我知道在public /文件夹中添加整个assets文件夹会将资产与我的视图链接起来,但它不会利用资产管道功能.该模板有很多插件和不同的选项,一个通常不使用所有.资源文件夹的大小为30MB.
我将它放在供应商/资产中并将其与资产管道一起使用,但这会产生两个问题:
javascript_include_tag "file"提供file.js).当然,我会通过脚本来做到这一点,但它似乎仍然是一个人应该首先遇到的问题.由于供应商/资产和公共/文件夹似乎都不是这些文件的正确位置,我希望有更好的选择(或者让后面的选项更好地工作).
asset-pipeline ×10
angularjs ×1
assets ×1
capistrano ×1
grails ×1
jasmine ×1
javascript ×1
turbolinks ×1