【问题标题】:Using Sprockets in a non-Rails/Rack project — Getting error on rake compile command在非 Rails/Rack 项目中使用 Sprockets — rake compile 命令出错
【发布时间】:2012-09-21 03:56:53
【问题描述】:

我正在尝试在非 Rails/Rack 项目中使用 Sprockets,但遇到了 how-to guide by Simone Carletti

我的项目设置如下:

.
Gemfile
Rakefile
/src
    /javascripts
    /stylesheets
        960.css

宝石文件:

source "http://rubygems.org"

gem 'sass'
gem 'sprockets'

瑞克文件:

require 'rubygems'
require 'bundler'
require 'pathname'
require 'logger'
require 'fileutils'

Bundler.require

ROOT        = Pathname(File.dirname(__FILE__))
LOGGER      = Logger.new(STDOUT)
BUNDLES     = %w( all.css all.js )
BUILD_DIR   = ROOT.join("build")
SOURCE_DIR  = ROOT.join("src")

task :compile => :cleanup do
  sprockets = Sprockets::Environment.new(ROOT) do |env|
    env.logger = LOGGER
  end

  sprockets.append_path(SOURCE_DIR.join('javascripts').to_s)
  sprockets.append_path(SOURCE_DIR.join('stylesheets').to_s)

  BUNDLES.each do |bundle|
    assets = sprockets.find_asset(bundle)
    prefix, basename = assets.pathname.to_s.split('/')[-2..-1]
    FileUtils.mkpath BUILD_DIR.join(prefix)

    assets.write_to(BUILD_DIR.join(prefix, basename))
    assets.to_a.each do |asset|
      # strip filename.css.foo.bar.css multiple extensions
      realname = asset.pathname.basename.to_s.split(".")[0..1].join(".")
      asset.write_to(BUILD_DIR.join(prefix, realname))
    end
  end
end

我跑

bundle install

并且包安装成功。

当我跑步时

rake compile

我收到以下错误

rake aborted!
Don't know how to build task 'cleanup'

Tasks: TOP => compile
(See full trace by running task with --trace)

关于为什么会发生这种情况的任何想法?如果这有助于调试此问题,请使用 ruby​​ 1.9.3p194。

【问题讨论】:

    标签: ruby gem sprockets


    【解决方案1】:
    task :compile => :cleanup do
    

    这意味着任务:compile 需要:cleanup,但您没有定义:cleanup 任务。改成

    task :compile do
    

    【讨论】:

    • 感谢您的帮助,西蒙娜。之后,我收到此错误:rake aborted! undefined method pathname for nil:NilClass Tasks: TOP => compile (See full trace by running task with --trace)
    • 脚本找不到捆绑包。 assets = sprockets.find_asset(bundle) 返回零。检查BUNDLES 常量并确保文件存在。
    • 啊,做到了。我没有创建 all.js 或 all.css。谢谢!但是有一个问题:构建目录正在被创建,但没有被缩小,screen.css.scss 没有被编译,使用*= require_self *= require_tree . 似乎没有将任何东西组合到 all.css 中。它只是从 /src 中获取我的 js 和 css 文件并将它们移动到 /build 中。有什么想法吗?
    • assets.write_to(BUILD_DIR.join(prefix, basename)) 应该写它们。
    • 你将如何指定这种格式的缩小器?我收到此错误NoMethodError: undefined method compress' for :uglify:Symbol`
    猜你喜欢
    • 2012-03-08
    • 2012-09-30
    • 2013-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    • 2015-12-21
    • 1970-01-01
    相关资源
    最近更新 更多