用户故事我正在尝试部署 consuledemocracy 的本地实例,如果失败,则出现 Sass::CompileErrorDescription我的系统是 Ubuntu 22.04,我使用以下版本:Rails v6.1.7.7...
我正在尝试部署 consuledemocracy 的本地实例,如果失败,则会出现 Sass::CompileError
我的系统是 Ubuntu 22.04,我使用以下版本:Rails v6.1.7.7NodeJS v18.18.2PSQL v14.11Ruby v3.2.3
我已按照本地安装的步骤进行操作,虽然可以部署服务器(bin/rails server -b 0.0.0.0),但访问本地主机时出现以下错误:
Completed 500 Internal Server Error in 5267ms (ActiveRecord: 165.5ms | Allocations: 3295956)
ActionView::Template::Error (Error: Can't find stylesheet to import.
1 @import "sassc-embedded-import:19";
^^^^^^^^^^^^^^^^^^^^^^^^^^
sassc-embedded-import:18 1:9 @import
/home/singular/consul/consuldemocracy/app/assets/stylesheets/application.scss 10:9 root stylesheet):
sassc-embedded (1.70.1) lib/sassc/embedded.rb:66:in `rescue in render'
sassc-embedded (1.70.1) lib/sassc/embedded.rb:13:in `render'
sassc-rails (2.1.2) lib/sassc/rails/template.rb:40:in `block in call'
sprockets (4.2.1) lib/sprockets/utils.rb:145:in `block in module_include'
sprockets (4.2.1) lib/sprockets/utils.rb:130:in `synchronize'
sprockets (4.2.1) lib/sprockets/utils.rb:130:in `module_include'
sassc-rails (2.1.2) lib/sassc/rails/template.rb:39:in `call'
sprockets (4.2.1) lib/sprockets/processor_utils.rb:84:in `call_processor'
...
...
当我运行 bin/rails assets:precompile 时,我得到:
singular@euprojects: ~/consul/consuldemocracy$ bin/rails assets:precompile
rails aborted!
SassC::SyntaxError: Error: Can't find stylesheet to import. (SassC::SyntaxError)
1 @import "sassc-embedded-import:19";
^^^^^^^^^^^^^^^^^^^^^^^^^^
sassc-embedded-import:18 1:9 @import
/home/singular/consul/consuldemocracy/app/assets/stylesheets/application.scss 10:9 root stylesheet
Caused by:
Sass::CompileError: Can't find stylesheet to import. (Sass::CompileError)
Tasks: TOP => assets:precompile
(See full trace by running task with --trace)
我觉得好像缺少样式表,但我在网上找不到任何信息。
单例类包含特定于单个对象的方法。
对于通用对象来说,这是一个很好的功能。但对于类来说,这至关重要。让我们从对象开始:
实例方法通常在类中定义。同一类的所有实例共享相同的实例方法。单例类位于对象和其所属类之间。它允许每个实例拥有自己的一组方法,独立于其他实例。
如果我们有两个类, Foo
每个类有 2 个实例 Bar
, a
, b
并且 c
, d
:
class Foo ; end
class Bar ; end
a = Foo.new #=> #<Foo:0x00007fc280963008>
b = Foo.new #=> #<Foo:0x00007f8319016b18>
c = Bar.new #=> #<Bar:0x00007fa66c8d7290>
d = Bar.new #=> #<Bar:0x00007f94d5106ac8>
您将拥有此类结构:(简化,不包括模块)
object singleton class class superclass ...
a #<Class:#<Foo:0x00007fc280963008>>
Foo
b #<Class:#<Foo:0x00007f8319016b18>>
Object BasicObject
c #<Class:#<Bar:0x00007fa66c8d7290>>
Bar
d #<Class:#<Bar:0x00007f94d5106ac8>>
Ruby 会延迟创建这些单例类,例如在调用 singleton_class
.
因此,在定义方法时 a.hello
,它并不存储在 a
的类 Foo
,而是 a
的单例类中:
def a.hello
'hello from a'
end
a.method(:hello).owner
#=> #<Class:#<Foo:0x00007fc280963008>> <-- a's singleton class
因此, b
实例 Foo
,但看不到该方法
b.hello #=> NoMethodError: undefined method `hello'
我们甚至可以定义一个同名的方法而 b
不会干扰 a
:
def b.hello
'hello from b'
end
b.method(:hello).owner
#=> #<Class:#<Foo:0x00007f8319016b18>> <-- b's singleton class
a.hello #=> "hello from a"
b.hello #=> "hello from b"
我们还可以定义一个泛型 hello
并 Foo
在每个实例级别上覆盖它:(通常不会这样做,但这是可能的)
class Foo
def hello
'hello'
end
end
def a.hello
"#{super} from a"
end
def b.hello
"b says #{super.upcase}!"
end
a.hello #=> "hello from a"
b.hello #=> "b says HELLO!"
c = Foo.new
c.hello #=> "hello"
以上内容对于类来说尤其重要。每个类都是以下类的一个实例 Class
:
Foo.class #=> Class
假设我们想要一种方法 Foo.hello
,我们应该在哪里定义它?
实例方法通常在实例的类中定义,因此我们 可以 的类 Foo
中定义它
class Class
def hello
'Hello from Foo'
end
end
Foo.hello
#=> "Hello from Foo"
但这会使该方法适用于所有实例 Class
:
Bar.hello
#=> "Hello from Foo"
String.hello
#=> "Hello from Foo"
最好有一个 Foo
实例独有的地方。那个地方就是 Foo
的单例类:
def Foo.hello
'Hello from Foo'
end
或者
class Foo
def self.hello # <-- self is Foo, so this is just "def Foo.hello"
'hello from Foo'
end
end
与上面类似 a.hello
,此方法仅适用于 Foo
:
Foo.hello #=> "hello from Foo"
Bar.hello #=> NoMethodError
我们将这些方法称为 类方法 ,但它们实际上只是单例类的实例方法:
Foo.method(:hello).owner
#=> #<Class:Foo> <-- Foo's singleton class
Foo.method(:hello).unbind == Foo.singleton_class.instance_method(:hello)
#=> true
如果你将类的单例方法与对象的单例方法进行比较,你会发现它们是相同的。这是因为在 Ruby 中,类也是对象,所有对象的工作原理都相同。