好的,所以我看到这个问题是由jQuery或Prototype的多个链接引起的,但我可以确认我只在整个页面链接到jQuery 一次.我的问题是:当我link_to确认删除时,弹出窗口显示两次.这是我模板中的适用代码(用Slim编写):
link_to('Destroy', depot_path(@depot.id), :confirm => "Really?", :method => :delete)
Run Code Online (Sandbox Code Playgroud)
我运行的Rails 3.1.0与资产管道打开,用gem 'jquery-rails'在我Gemfile,下面是我的application.js文件(这是由链轮的资产管道编译).
//= require jquery
//= require jquery_ujs
//= require 'underscore'
//= require 'backbone'
Run Code Online (Sandbox Code Playgroud)
我underscore.js和backbone.js我的/vendor/assets/javascripts/目录中,链轮似乎找到了那些没关系.我还搜索了application.jssprockets提供的文件,jQuery只在那里一次,而jQuery UJS只在那里一次.当我的页面呈现时,这就是我的头部样子(我省略了csrf-token显示的值,FWIW).
<head>
<meta content="text/html; charset=utf-8" http-equiv="content-type">
<title>Administration</title>
<link href="/assets/screen.css" media="screen" rel="stylesheet" type="text/css" />
<script src="/assets/application.js" type="text/javascript"></script>
<meta content="authenticity_token" name="csrf-param" />
<meta content="--token--omitted--" name="csrf-token" />
<script src="/assets/common/subdata.js" type="text/javascript"></script>
<link href="/assets/show.css" media="screen" rel="stylesheet" …Run Code Online (Sandbox Code Playgroud) jquery ruby-on-rails ruby-on-rails-3.1 sprockets asset-pipeline
使用Spin运行Guard可以很好地保持我的测试速度,除非资产是相关的并且需要编译.似乎每当我更改其中的某些内容时,测试环境都会重新编译所有资产.我已经看到了部署脚本的示例,这些脚本只重新编译源已更改的资产.这可以用于测试吗?或者是否有另一种加速测试资产编译的方法?
我正在使用一个相当具体的设置,所以我很乐意在需要时提供更多信息,但我觉得这个问题的答案可能会在更多的情况下使用,而不仅仅是我的.
我正在使用Rails 3.2.13和Rails Asset Pipeline.我想使用资产管道,所以我可以使用SASS和CoffeeScript和ERB作为我的资产,并让Pipeline自动编译它们,所以我不能在开发中关闭管道.我不是在开发中预编译资产,甚至没有public/assets/目录.
但是,当我对包含文件进行更改时,例如对_partial.html.erb文件中包含(呈现)的layout.html.erb文件进行更改,而不更改执行包含本身的文件(在此示例中layout.html.erb),Sprockets不检测更改并使其无效缓存,所以我不断得到相同的陈旧文件.当我在积极开发中执行此操作时,我想禁用任何资产缓存,以便我可以对每个请求进行更改,但我无法弄清楚如何执行此操作.我在我的设置中设置了以下所有内容development.rb:
config.action_controller.perform_caching = false
config.action_dispatch.rack_cache = nil
config.middleware.delete Rack::Cache
config.assets.debug = true
config.assets.compress = false
config.cache_classes = false
Run Code Online (Sandbox Code Playgroud)
尽管如此,即使这样,文件也会显示在下面tmp/cache/assets/,tmp/cache/sass/并且未来的请求也无法进行更改.现在我每次想要看到更改时都必须手动删除这些目录.
不幸的是,资产管道RoR指南的How Caching Works部分的全部内容是:
Sprockets使用默认的Rails缓存存储来缓存开发和生产中的资产.
TODO:添加有关更改默认商店的更多信息.
那么,我如何让Sprockets按需编译资产但不缓存结果呢?
我们升级到sass-rails版本5.0.0并获得此弃用警告:
DEPRECATION WARNING: Extra .css in SCSS file is unnecessary. Rename /Users/foo/Projects/foo/app/assets/stylesheets/foo.css.scss to /Users/foo/Projects/foo/app/assets/stylesheets/foo.scss. (called from _app_views_layouts_application_html_erb__1560597815210891605_70190441246060 at /Users/foo/Projects/foo/app/views/layouts/application.html.erb:13)
Run Code Online (Sandbox Code Playgroud)
有谁知道这是怎么回事?gem是否真的希望我重命名我的所有样式表资源:
app/assets/stylesheets/foo.css.scss
Run Code Online (Sandbox Code Playgroud)
至:
app/assets/stylesheets/foo.scss
Run Code Online (Sandbox Code Playgroud)
?
似乎与我一起反对多年的Rails惯例.也许有办法抑制弃用警告?
我是Rails的新手,无法找出组织资产的最佳方法.这个问题的目的是收集我的想法,征求意见,并随着时间的推移进化文档 - 也许有一天它可能是一个Rails指南.(Rails Wiki似乎已经死了.)这将作为新手概念化的辅助,而不是参考,因此它将仅限于最常见的场景.
资产管道 - 概述
有关管道的目的,好处和内部工作方式的详细信息,请从本指南开始:http://guides.rubyonrails.org/asset_pipeline.html 我将仅在此总结与我的目的相关的位.
管道必要的原因是:
管道的额外好处是:
资产管道 - 默认文件系统布局
app|lib|vender/assets/ - 用于将由管道处理的文件.app/assets/ - 专门针对您为应用程序创建的文件.lib/assets/ - 专门针对您为跨多个应用程序共享而创建的文件.vendor/assets/ - 专门用于其他人创建的文件,例如jQuery和Twitter Bootstrap(虽然它们经常由gem提供,而不是直接导入/ vender).public/ - 此处的文件保留原样,可直接从您的Web应用程序的根路径('/')获取.资产管道 - 默认文件和行为
应用程序/资产/ JavaScript的/ application.js中
//= require jquery
//= require jquery_ujs
//= require_tree .
Run Code Online (Sandbox Code Playgroud)
应用程序/资产/样式表/ application.css
/*
*= require_self
*= require_tree .
*/
Run Code Online (Sandbox Code Playgroud)
public/404.html
public/robots.txt
...
的Gemfile
...
gem 'jquery-rails'
...
Run Code Online (Sandbox Code Playgroud)
以下是资产管道编译器使用新Rails应用程序的默认设置执行的操作:
application.js,application.css …我正在尝试从Rails 3模型中使用Sprockets的image_path方法.我已经尝试ActionView::Helpers::AssetTagHelper在我的模型中包含并调用image_path,但这不起作用(undefined local variable or method 'config').
有任何想法吗?
更新 - 这对我有用:
ActionController::Base.new.view_context.asset_path("image.png")
Run Code Online (Sandbox Code Playgroud) ruby-on-rails ruby-on-rails-3 sprockets asset-pipeline ruby-on-rails-3.2
我注意到我的资产似乎被编译了两次,这大大减慢了我的部署,因为这一步是最耗时的部分:
~/projects/rewportal(mapwidget ?) rake assets:precompile
/home/ruy/.rvm/rubies/ruby-1.9.3-p194/bin/ruby /home/ruy/.rvm/gems/ruby-1.9.3-p194@rewportal/bin/rake assets:precompile:all RAILS_ENV=production RAILS_GROUPS=assets
AssetSync: using /home/ruy/projects/rewportal/config/initializers/asset_sync.rb
AssetSync: using /home/ruy/projects/rewportal/config/initializers/asset_sync.rb
AssetSync: Syncing.
Using: Directory Search of /home/ruy/projects/rewportal/public/assets
Uploading: assets/application-5170f52c1dd49cb382d5135bee01d75e.js
[...]
Fetching files to flag for delete
Flagging 8 file(s) for deletion
Deleting: assets/active_admin-4ce46d089d4b0080e87c9abcb6fa6c97.css
[...]
AssetSync: Done.
Run Code Online (Sandbox Code Playgroud)
这是正常的吗?
当我预编译到其他环境(非生产)时,我可以看到每个资产的详细编译两次:
~/projects/rewportal(mapwidget ?) rake RAILS_ENV=qa assets:precompile --trace
** Invoke assets:precompile (first_time)
** Execute assets:precompile
/home/ruy/.rvm/rubies/ruby-1.9.3-p194/bin/ruby /home/ruy/.rvm/gems/ruby-1.9.3-p194@rewportal/bin/rake assets:precompile:all RAILS_ENV=qa 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 …Run Code Online (Sandbox Code Playgroud) 我想设置引导上Rails4使用bootstrap-sass和我得到这个著名的错误:
Sprockets::FileNotFound - couldn't find file 'bootstrap'
(in app/assets/javascripts/application.js:16):
Run Code Online (Sandbox Code Playgroud)
我试过以下:
twitter/bootstrap 在 application.jsgem 'bootstrap-sass', '~> 3.1.0' 是集团外资产我花了很多时间从其他帖子中提出不同的建议.我如何系统地调试这个,如何设置bootstrap-sass?
ps:
也试图twitter-bootstrap-rails没有运气.
这是一些文件
的application.js
//= require jquery
//= require jquery_ujs
//= require js-routes
//= require bootstrap
//= require_tree .
//= require bootstrap-slider
Run Code Online (Sandbox Code Playgroud)
application.css.scss
*= require jquery.ui.core
*= require jquery.ui.theme
*= require_self
*= require bootstrap-slider
*= require_tree .
*= stub active_admin
*/
@import "bootstrap";
Run Code Online (Sandbox Code Playgroud)
的Gemfile
source 'https://rubygems.org'
ruby '2.0.0'
gem 'rails', '4.0.0' …Run Code Online (Sandbox Code Playgroud) ruby-on-rails asset-pipeline twitter-bootstrap bootstrap-sass ruby-on-rails-4
每次我在开发过程中对我的SASS进行更改时,加载我的时间都会增加20秒+加载时间application.css.
我已经阅读了其他一些问题,并尝试过:
config.assets.debug = false.这是我读到的:
我一直在从Rails 3.2和现在的4.2中遇到这个问题.
我在这里疯了.我如何找到这个烂摊子的瓶颈?
我正在寻找一种解决方案,可以让我精确地确定花费时间的地方,并提出减少编译时间的方法.
这是Rails 4.2应用程序的app/assets /.

有3个bootstraps js和css文件.部署到生产(ubuntu 12.1)后,资产预编译在服务器上完成(部署在suburi下):
RAILS_ENV=production bundle exec rake assets:precompile RAILS_RELATIVE_URL_ROOT=/mysuburi
Run Code Online (Sandbox Code Playgroud)
这是production.rb:
config.cache_classes = true
config.eager_load = true
config.consider_all_requests_local = false
config.action_controller.perform_caching = true
config.serve_static_files = false #ENV['RAILS_SERVE_STATIC_FILES'].present?
config.assets.compress = true
config.assets.js_compressor = :uglifier
config.assets.compile = false
config.assets.digest = true
config.log_level = :debug
config.i18n.fallbacks = true
config.active_support.deprecation = :notify
config.log_formatter = ::Logger::Formatter.new
config.active_record.dump_schema_after_migration = false
Run Code Online (Sandbox Code Playgroud)
以下是负责人application.css.scss:
@import "bootstrap.min.css";
@import "bootstrap-theme.min.css";
@import "simple_form.css.scss";
@import "user_menus.css.scss";
Run Code Online (Sandbox Code Playgroud)
在application.js,它有:
//= require bootstrap.min
Run Code Online (Sandbox Code Playgroud)
以下是lspublic/assets/on production服务器的输出:
application-05cf37813d76c2bd659271403789374cc118f1a4e616ec220969577b79ff6514.css …Run Code Online (Sandbox Code Playgroud) asset-pipeline ×10
ruby-on-rails ×10
sprockets ×4
sass ×2
activeadmin ×1
guard ×1
jquery ×1
precompile ×1
rack ×1
rspec ×1
ruby ×1