更新: 科林建议删除行// = require_tree.已经解决了这个问题.
我已经浪费了2天时间试图跟踪每个建议并解决我的问题.我试图按照Windows机器上的http://ruby.railstutorial.org书籍,并且不能为我的生活经历以下讨厌的错误.
ExecJS::RuntimeError in Static_pages#home
Showing C:/Users/.../bootcamp-sample-app/app/views/layouts/application.html.erb where line #6 raised:
["ok","(function() {\n\n\n\n}).call(this);\n"]
(in C:/Users/.../bootcamp-sample-app/app/assets/javascripts/sessions.js.coffee)
Extracted source (around line #6):
3: <head>
4: <title><%= full_title(yield(:title)) %></title>
5: <%= stylesheet_link_tag "application", media: "all" %>
6: <%= javascript_include_tag "application" %>
7: <%= csrf_meta_tags %>
8: <%= render 'layouts/shim' %>
9: </head>
Rails.root: C:/Users/.../bootcamp-sample-app
Application Trace | Framework Trace | Full Trace
app/views/layouts/application.html.erb:6:in `_app_views_layouts_application_html_erb___487732698_30422172'
Request
Run Code Online (Sandbox Code Playgroud)
我已经尝试了所有的建议,包括用msi安装nodejs,使用execjs 1.3.0和其他我甚至不记得的东西.这是gem文件
source 'https://rubygems.org'
gem 'rails', '3.2.8'
gem 'bootstrap-sass', '2.0.0'
gem …Run Code Online (Sandbox Code Playgroud) 在Rails 3中,专门用于在资产管道中生成资产的gem被正确放置在assetsGemfile 的组中:
...
# Gems used only for assets and not required
# in production environments by default.
group :assets do
gem 'sass-rails'
gem 'coffee-rails'
gem 'uglifier'
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer', :platforms => :ruby
end
Run Code Online (Sandbox Code Playgroud)
现在,根据(仍在进行中)升级文档:
Rails 4.0从Gemfile中删除了资产组.升级时,您需要从Gemfile中删除该行.
果然,使用RC1创建一个新项目会生成一个Gemfile,其默认包含在任何组之外的资产相关gem:
source 'https://rubygems.org'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.0.0.rc1'
# Use sqlite3 as the database for Active Record
gem 'sqlite3'
# Use SCSS for stylesheets …Run Code Online (Sandbox Code Playgroud) 我们是否应该使用image-urlRails 4中的其他内容和其他内容?它们返回的值不同,似乎没有意义.如果我有logo.png,/app/assets/images/logo.png我会做以下,这就是我得到的:
image-url("logo.png") -> url("/images/logo.png") #obviously doesn't work
image-path("logo.png") -> "/images/logo.png"
asset-url("logo.png") -> url("/logo.png")
Run Code Online (Sandbox Code Playgroud)
当然,这些都不起作用,因为它们至少需要/assets在前面.
更新:实际上,我刚刚注意到,如何在Rails 4中访问图像?我有一张图片/app/assets/images/logo.png.但是,如果我转到以下任何网址,我仍然看不到我的图片:
http://localhost:3000/assets/logo.png
http://localhost:3000/assets/images/logo.png
http://localhost:3000/logo.png
http://localhost:3000/images/logo.png
Run Code Online (Sandbox Code Playgroud)
更新2:我能提出的唯一方法logo.png是将其移动到/app/assets/stylesheets目录然后拉起:
http://localhost:3000/assets/logo.png
Run Code Online (Sandbox Code Playgroud) 所以,我有一个app/assets/stylesheets/看起来像这样的目录结构:
|-dialogs
|-mixins
|---buttons
|---gradients
|---vendor_support
|---widgets
|-pages
|-structure
|-ui_elements
Run Code Online (Sandbox Code Playgroud)
在每个目录中,有多个sass partials(通常是*.css.scss,但是一个或两个*.css.scss.erb).
我可能会假设很多,但rails应该自动编译那些目录中的所有文件,因为*= require_tree .在application.css中,对吧?
我最近尝试通过删除所有颜色变量并将它们放在根app/assets/stylesheets文件夹(_colors.css.scss)中的文件中来重构这些文件.然后我在app/assets/stylesheets名为master.css.scss 的根文件夹中创建了一个文件,如下所示:
// Color Palette
@import "colors";
// Mixins
@import "mixins/buttons/standard_button";
@import "mixins/gradients/table_header_fade";
@import "mixins/vendor_support/rounded_corners";
@import "mixins/vendor_support/rounded_corners_top";
@import "mixins/vendor_support/box_shadow";
@import "mixins/vendor_support/opacity";
Run Code Online (Sandbox Code Playgroud)
我真的不明白rails如何处理资产编译的顺序,但它显然不利于我.看来没有一个文件意识到他们有任何变量或mixins被导入,所以它抛出错误,我无法编译.
Undefined variable: "$dialog_divider_color".
(in /home/blah/app/assets/stylesheets/dialogs/dialog.css.scss.erb)
Undefined mixin 'rounded_corners'.
(in /home/blah/app/assets/stylesheets/widgets.css.scss)
Run Code Online (Sandbox Code Playgroud)
该变量$dialog_divider_color在_colors.css.scss中明确定义,并_master.css.scss导入颜色和我的所有mixins.但显然铁路没有获得那份备忘录.
有什么方法可以解决这些错误,还是我需要将所有变量定义放回每个单独的文件,以及所有mixin导入?
不幸的是,这家伙似乎并不认为这是可能的,但我希望他错了.任何想法都非常感谢.
有谁知道如何在Rails 3.1中向资产管道添加另一个文件夹?
我想以app/assets/fonts同样的方式app/assets/images服务.
更新:5-7-2013
只是为将来发现此问题以明确添加资产路径的人添加一些说明,在application.rb文件中:
config.assets.paths << "#{Rails.root}/app/assets/fonts"
Run Code Online (Sandbox Code Playgroud)
但是,由于上面的路径app/assets不在你明确添加它,你只需要重新启动rails应用程序,这样Sprockets就可以把它拿起来.
你必须明确地添加是外面的路径app/assets,lib/assets或者vendor/assets,只是记得,虽然链轮拿起新的文件夹是存在,当你的应用程序中加载,在我的经验,它不拿起资产路径新的文件夹,而不重启.
在Rails 4和Ruby 2.0中使用资产管道的本地机器上一切顺利.但是当部署到heroku时,它显示:
-----> Preparing app for Rails asset pipeline
Running: rake assets:precompile
I, [2013-03-12T03:28:29.908234 #912] INFO -- : Writing /tmp/build_1n6yi8lwna3sj/public/assets/rails-2ee5a98f26fbf8c6c461127da73c47eb.png
I, [2013-03-12T03:28:29.914096 #912] INFO -- : Writing /tmp/build_1n6yi8lwna3sj/public/assets/trash-3c3c2861eca3747315d712bcfc182902.png
I, [2013-03-12T03:28:33.963234 #912] INFO -- : Writing /tmp/build_1n6yi8lwna3sj/public/assets/application-bf2525bd32aa2a7068dbcfaa591b3874.js
I, [2013-03-12T03:28:40.362850 #912] INFO -- : Writing /tmp/build_1n6yi8lwna3sj/public/assets/application-13374a65f29a3b4cea6f8da2816ce7ff.css
Asset precompilation completed (14.36s)
Run Code Online (Sandbox Code Playgroud)
Heroku似乎编译文件,但把它放在/ tmp没有任何错误.我的问题是:
如果我在Rails 3.1中生成一个新的控制器,也会自动添加一个带有控制器名称的javascript文件.首先,我认为这个javascript文件只会在调用相关控制器时使用.
默认情况下//= require_tree .,application.js-file中有指令,包括树上的每个javascript文件.
我怎么才能加载控制器特定的脚本?
assets ruby-on-rails ruby-on-rails-3.1 sprockets asset-pipeline
有没有办法使用Rails助手方法,更具体地说,是javascript资产文件中的路径助手方法.这个文件foo.js.coffee.erb
$('#bar').val("<%= create_post_path %>")
Run Code Online (Sandbox Code Playgroud)
如果我能从erubis那里得到,我会喜欢它
$('#bar').val("path/to/create")
Run Code Online (Sandbox Code Playgroud) javascript ruby-on-rails erubis ruby-on-rails-3 asset-pipeline
我有一个Rails 4应用程序,我正在尝试使用自定义字体.
我已经关注了很多关于这方面的教程,不知何故它只是不适用于我的应用程序.
我正在使用application.css.less并有以下声明:
@font-face {
font-family: 'HDVPeace';
src: font-url('HDV_Peace.eot');
src: font-url('HDV_Peace.eot?iefix') format('eot'),
font-url('HDV_Peace.woff') format('woff'),
font-url('HDV_Peace.ttf') format('truetype'),
font-url('HDV_Peace.svg#webfont') format('svg');
}
Run Code Online (Sandbox Code Playgroud)
注意:我尝试过使用 url() 而不是 font-url() .前者在控制台上生成404错误,后者似乎根本不做任何事情.在资源下的chrome dev工具中,字体文件不会出现在 文件夹下assets 或任何位置
在我的config/application.rb身上:
config.assets.paths << Rails.root.join('app', 'assets', 'fonts')
Run Code Online (Sandbox Code Playgroud)
在我config/environments/development.rb和config/environments/production.rb我都有:
config.assets.paths << Rails.root.join('app', 'assets', 'fonts')
config.assets.precompile += %w( .svg .eot .woff .ttf)
Run Code Online (Sandbox Code Playgroud)
我的字体文件位于app/assets/fonts以下文件夹中,并且不包含在...
我错过了什么?
更新:
文件夹结构
app
|----assets
|----fonts
|----HDV_Peace.eot
|----HDV_Peace.svg
|----HDV_Peace.ttf
|----HDV_Peace.woff
Run Code Online (Sandbox Code Playgroud) 有什么方法可以加快Rails Asset Pipeline预编译过程?