`
dazuiba
  • 浏览: 130646 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

如何解决 singleton can't be dumped

阅读更多
问题描述:
一场堆栈如下
TypeError (singleton can't be dumped):
    D:/dev/InstantRails/ruby/lib/ruby/1.8/pstore.rb:349:in `dump'
    D:/dev/InstantRails/ruby/lib/ruby/1.8/pstore.rb:349:in `dump'
    D:/dev/InstantRails/ruby/lib/ruby/1.8/pstore.rb:330:in `transaction'
    D:/dev/InstantRails/ruby/lib/ruby/1.8/cgi/session/pstore.rb:81:in `update'
    D:/dev/InstantRails/ruby/lib/ruby/1.8/cgi/session/pstore.rb:88:in `close'
    D:/dev/InstantRails/ruby/lib/ruby/1.8/cgi/session.rb:324:in `close'
    D:/dev/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/base.rb:1190:in `close_session'
    D:/dev/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/base.rb:1234:in `process_cleanup_without_flash
    D:/dev/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/flash.rb:146:in `process_cleanup_without_filte
    D:/dev/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/filters.rb:761:in `process_cleanup_without_ses


该问题的原因是,一些singleton对象不能放到session中。这里的singleton对象指的是没有办法store 或者persistent的对象,比如:上传的文件,这个对这个对象进行persistent是没有意义的,因为该文件所指向的文件源在网络上、在浏览器所在的机器上。
  注意,有两种方式会引发这个异常,1、你将一个singleton对象直接放到session中 2、你放到session的对象引用了一个singleton对象。
比如,你将People类的一个事例,放到了session中,该类中引入了一个module ImageSystem,该module专门处理文件上传的。不巧的是,该module的设计者将一个临时文件 tempfile当成了一个instance 变量,于是异常一定会产生。
分享到:
评论

相关推荐

    C++完美实现Singleton模式

    inline T* Singleton<T>::instance() { if (_instance.get() == nullptr) { _instance.reset(new T); } return _instance.get(); } // 宏定义用于声明Singleton类 #define DECLARE_SINGLETON_CLASS(type) \...

    Singleton

    这种方式是线程安全的,且只在Singleton类加载时初始化Singleton实例,因此既解决了懒加载,又避免了同步问题。 ```java public class Singleton { private Singleton() {} private static class Singleton...

    设计模式 t04Singleton

    设计模式 t04Singleton

    C++ 实现的singleton 模式

    **C++实现的Singleton模式详解** Singleton模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下都非常有用,例如管理共享资源,如数据库连接池,或者确保某个...

    SingleTon的模板(template)化应用

    这里,`Singleton`类是一个模板类,它会根据传入的类型T创建相应的实例。通过这种方式,我们可以为任何类创建单例,例如: ```cpp class MyClass { public: MyClass() { /*...*/ } }; MyClass* myInstance = ...

    Singleton Pattern 源码

    单例模式(Singleton Pattern)是软件设计模式中的一种,它保证一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下非常有用,比如控制资源的唯一性、全局配置对象或者缓存服务等。本篇文章将深入探讨...

    Qt qml Singleton 单例模式

    在Qml中,我们可以通过Qt的Singleton组件来实现这一模式。 首先,让我们理解单例模式的基本概念。在软件工程中,单例模式保证一个类只有一个实例,并提供一个全局访问点。这个设计模式在许多场景下都很实用,比如...

    singleton设计模式java实现及对比

    **Singleton设计模式** Singleton设计模式是软件工程中最常用的设计模式之一,它的主要目的是确保一个类只有一个实例,并提供全局访问点。在Java中,Singleton模式的实现有多种方式,每种方式都有其优缺点,我们将...

    Java 单例模式Singleton

    简单的单例模式举例Singleton 分为恶汉式 懒汉式

    单例模式Singleton

    单例模式(Singleton Pattern)是一种常用的软件设计模式,它的核心思想是确保一个类在整个应用程序中只有一个实例存在,并提供一个全局访问点来获取这个实例。这种模式在很多场景下非常有用,比如管理系统资源、...

    Singleton 单例模式

    Singleton 单例模式是软件设计模式中的一种,它限制了类的实例化过程,确保一个类在整个系统中只有一个实例存在。这种模式常用于系统资源管理,比如数据库连接、线程池或者缓存服务等,因为这些资源往往需要全局共享...

    Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)

    Java设计模式是面向对象编程中的重要概念,它们是解决常见问题的经验总结,为代码的可重用性、可维护性和可扩展性提供了指导。这里我们将深入探讨三种常见的Java设计模式:单例(Singleton)、工厂方法(Factory ...

    (创建型模式)Singleton模式

    为了解决这些问题,可以考虑使用依赖注入或者使用Prototype模式作为替代。 总的来说,Singleton模式是一种常见的设计模式,它在适当的情况下可以简化系统设计,提高效率。但在过度使用或不恰当使用时,也可能导致...

    单例极致 singleton C++

    1、没有构造函数(DEFINE_SINGLETON_DEFAULT); 2、有构造函数,构造函数没有参数(DEFINE_SINGLETON_CONSTRUCT_NO_PARAM); 3、有构造函数,构造函数有没有参数版本(DEFINE_SINGLETON_CONSTRUCT_WITH_DEFAULT)...

    单例模式Singleton(java源码)

    Singleton模式包含的角色只有一个,就是Singleton。Singleton拥有一个私有构造函数,确保用户无法通过new直接实例化它。除此之外,该模式中包含一个静态私有成员变量instance与静态公有方法Instance()。Instance()...

    SingletonTemplate

    "SingletonTemplate"显然是一种为了简化单例模式实现而设计的模板类。 在Java或其他面向对象语言中,实现单例模式有多种方法,但常见的有饿汉式、懒汉式、双重检查锁定(DCL)以及静态内部类等。SingletonTemplate...

    Laravel开发-singleton-pattern

    在Laravel框架中,设计模式的应用是提升代码质量和可维护性的重要手段之一,而Singleton(单例模式)是其中一种常见的模式。Singleton确保一个类只有一个实例,并提供一个全局访问点,这样可以避免创建多个对象导致...

    Loki singleton

    【Loki Singleton】 Loki 是一个 C++ 的库,它提供了许多设计模式的实现,包括单例模式(Singleton)。在软件工程中,单例模式是一种常用的创建对象的方式,确保一个类只有一个实例,并提供一个全局访问点。这在...

    单例实现源码singleton-C++

    以下是对"单例实现源码singleton-C++"的详细解析。 1. **静态成员变量法** 这是最常见的单例实现方式。在类中定义一个静态成员变量,该变量保存唯一的实例。例如: ```cpp class Singleton { public: static ...

Global site tag (gtag.js) - Google Analytics