0 0

rails 如何reload某个class45

console中reload!指令,可以重新加载项目

但是如果仅是在运行过程中重新加载某个class 代码,改如何做?


问题补充:
不是这样简单的

基本情况是这样 有两个表fool和fish,相互关系为has_many,既fool.fishs

在运行过程中 基本逻辑如下

fools = Fool.find(:all)
fools.each do |x|
Fish.class_eval("set_table_name :fish_1_1") #根据运行环境需要,切换连接的表
 
p x.fishs #这里会出错
end


测试都是在console中进行的

多次测试下来,情况好像是这样。

fools = Fool.find(:all) 

这个语句加载了Fool,Fish代码,并确定为 Fish的table_name是 fish

虽然Fish.class_eval("set_table_name :fish_1_1")切换了表,但是fools依然使用的旧代码。

于是想考虑下 把 Fool和Fish的代码重新reload

这种情况下 ruby自动加载功能就不够用了。


问题补充:
测试在控制台进行,不是代表代码的实际运行环境
控制台比较好测试这个。如果是development,这个测试就没有意义了。




问题补充:
fools = Fool.find(:all)  
Fish.class_eval("set_table_name :fish_1_1") #根据运行环境需要,切换连接的表  
fools.each do |x|  
   
p x.fishs #这里会出错  
end  


呵呵,这个是个很麻烦的问题。
不过这样改是不太符合运行环境的。

fools数据处理过程中,很有可能因为某个外部条件已经到达,需要马上切换fishs表数据。

现在我做了rake,先将就着用了
当each 中 x.fishs 出错,记录下出错的fool.id,然后把代卖全部reload一次,从出错的id重新运行这段代码。

当然这个并没有根本上解决问题。

问题补充:
to:夜鸣猪

load Rails_ROOT+'/app/models/Fish.rb'

这个做法,没有用

你如果看我提供代码就会发现, 是在运行时改变了 fish表对应的table_name

我所希望找到的方案就是更改table_name之后,代码能够立即生效。

重新load,那load是事先编写好的静态代码,根本无用阿。

我在前后已经说的很清楚了,是怎么样一个运行环境,和代码怎么出错的。

你可以自己建几张表 fools ,fishs_1,fishs_2,fishs_n
自己模拟测试下就明了了,不然只是浪费你我时间而已。


2009年6月30日 22:29

5个答案 按时间排序 按投票排序

0 0

我只是希望能确认一下

为什么,你不能在console下,直接输入

load Rails_ROOT+'/app/models/Fish.rb'

这也不是把你的新修改的文件,又加载了一遍吗?
而且,应该能够覆盖

不了解状况,希望能试试解除俺的疑惑,谢谢

2009年7月02日 10:15
0 0

引用
不过这样改是不太符合运行环境的。

fools数据处理过程中,很有可能因为某个外部条件已经到达,需要马上切换fishs表数据。


不了解你的运行环境,或许可以这样:
some_proc = lambda do
 Fish.class_eval do
 #do something
 end
end
def some_condition_of_fools
 #
 some_proc.call if some_condition
end

2009年7月01日 22:52
0 0

刚学rails...还不太熟悉。从纯ruby的角度分析了一下,感觉你在一个block里面去修改block调用者自身才会达不到想要的结果,看下面的例子:

[1,2,3].each do |i|
  #在each block内修改each..
  Array.class_eval do
    def each 
      size.times{|i| yield self[i] * 2}
    end
  end
  p i
end
#结果为1 2 3
#在外部修改each..
 Array.class_eval do
    def each 
      size.times{|i| yield self[i] * 2}
    end
  end
[1,2,3].each{|i| p i}
#结果为 2 4 6  



不太理解下面的代码:
fools = Fool.find(:all)
fools.each do |x|
Fish.class_eval("set_table_name :fish_1_1") #根据运行环境需要,切换连接的表
 
p x.fishs #这里会出错
end


是不是能写成这样?
fools = Fool.find(:all)
Fish.class_eval("set_table_name :fish_1_1") #根据运行环境需要,切换连接的表
fools.each do |x|

 
p x.fishs #这里会出错
end


希望能有帮助..

2009年7月01日 16:07
0 0

哇,45分啦
可是我的确不知道有什么明确的办法,可以在控制台下,支持指定Reload的办法

我只是想,说说我的看法,探讨一下,希望多少有点帮助吧


1. 必须用控制台
2. 必须要只更新一个特定table

控制台就是协助开发吧,有什么必定用它的道理吗,平心而论啊,比如,rails下debug也很好用吧? 想法而已

其次,假设必须控制台

我考虑,你能不能,继承覆盖,就是通过require或者load来一个新的model覆盖原来的?想法而已

2009年7月01日 11:10
0 0

要重新加载的class一定是修改过的吧?
既然修改过ruby会自动重新加载:


class TT
  def say_hello
    "hello"
  end
end
tt = TT.new
p tt.say_hello
class TT
  def say_hi
    "hi"
  end
end
p "class changed"
p tt.say_hi
p tt.say_hello

2009年6月30日 22:57

相关推荐

    Rails101_by_rails4.0

    《Rails101_by_rails4.0》是一本专注于Rails 4.0.0版本和Ruby 2.0.0版本的自学教程书籍,它定位于中文读者,旨在成为学习Rails框架的参考教材。Rails(Ruby on Rails)是一个采用Ruby语言编写的开源Web应用框架,它...

    Rails 101 入门电子书

    ### Rails 101 入门电子书知识点详解 #### 一、简介 《Rails 101 入门电子书》是一本非常适合初学者直接入门的书籍,它由xdite编写并出版于2014年6月10日。本书主要针对的是希望学习Ruby on Rails框架的读者,特别...

    Rails项目源代码

    Ruby on Rails,通常简称为Rails,是一个基于Ruby编程语言的开源Web应用框架,遵循MVC(Model-View-Controller)架构模式。这个“Rails项目源代码”是一个使用Rails构建的图片分享网站的完整源代码,它揭示了如何...

    关于rails 3.1 cucumber-rails 1.2.0

    Rails 3.1 和 Cucumber-Rails 1.2.0 是两个在Web开发领域非常重要的工具,尤其对于Ruby on Rails框架的测试和自动化流程。本文将深入探讨这两个组件,以及它们如何协同工作来增强软件开发的效率和质量。 首先,...

    rails2-sample

    从给定的文件信息来看,我们正在探讨的是一本关于Ruby on Rails的书籍,书名为《Simply Rails2》,作者是Patrick Lenz。本书旨在为初学者提供深入理解Ruby on Rails框架的指南,从基础概念到高级主题均有涵盖,是...

    Rails

    标题 "Rails" 指的是 Ruby on Rails,一个开源的Web应用程序框架,它基于Ruby编程语言,遵循MVC(模型-视图-控制器)架构模式。Rails由David Heinemeier Hansson在2004年创建,其设计理念是强调代码的简洁性、DRY...

    rails指南 中文版

    Rails指南中文版是针对Ruby on Rails框架的一份详尽教程,旨在帮助开发者深入理解并熟练掌握这个强大的Web应用开发工具。Ruby on Rails(简称Rails)是一个基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-...

    使用Aptana+Rails开发Rails Web应用(中文)

    在开发Web应用时,Ruby on Rails(简称Rails)框架因其高效、简洁的代码风格和强大的社区支持而备受青睐。Aptana是一款强大的集成开发环境(IDE),尤其适用于Rails项目的开发,它提供了丰富的特性来提升开发效率。...

    Ruby on Rails Guides v2 - Ruby on Rails 4.2.5

    ### Ruby on Rails Guides v2 - Ruby on Rails 4.2.5 #### 一、重要概念及基础假设 - **重要概念**:本指南旨在帮助读者深入理解Ruby on Rails(以下简称Rails)4.2.5版本的核心功能与最佳实践。 - **基础假设**:...

    Ruby on Rails安装指南(Ruby 1.8.6+Rails 2.0.2)

    Ruby on Rails 安装指南 Ruby on Rails 安装指南是指安装 Ruby 1.8.6 和 Rails 2.0.2 的详细步骤。首先,需要下载 Ruby One-Click Installer 版本,并安装 Ruby。然后,下载 Rails 2.0.2 版本,并安装。接下来,...

    rails 2.3.2离线安装rails 2.3.2离线安装

    rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails ...

    Rails recipes

    Rails Recipes是一本针对Ruby on Rails框架的实用书籍,它收集了一系列高效解决问题的技巧和方法,也被称为“Rails开发者的宝典”。作者们通过分享自己的经验和见解,为Rails程序员提供了一本既有实际操作指导又有...

    rails _sunspot 学习笔记

    with(:search_class, params[:class]) if params[:class].present? paginate(:page => params[:page], :per_page => 30) end end end ``` 这里定义了一个 `searches_controller`,其中包含一个 `show` 方法来...

    [Rails] Crafting Rails Applications (英文版)

    [Pragmatic Bookshelf] Crafting Rails Applications Expert Practices for Everyday Rails Development (E-Book) ☆ 图书概要:☆ Rails 3 is a huge step forward. You can now easily extend the framework, ...

    rails2.3.2

    标题 "rails2.3.2" 指的是 Ruby on Rails 框架的一个特定版本,即 2.3.2。Ruby on Rails(通常简称为 Rails)是一个基于 Ruby 语言的开源 Web 应用程序框架,它遵循 Model-View-Controller (MVC) 设计模式,用于构建...

    rails本地安装包完整版

    Rails是Ruby编程语言的一个著名框架,用于开发Web应用程序。它以MVC(模型-视图-控制器)架构模式为基础,提供了许多内置功能,使开发者能够更高效地编写代码。在这个"rails本地安装包完整版"中,包含了Rails 2.1.0...

    component base rails applications

    本书《Component-Based Rails Applications》主要介绍了如何使用Rails引擎(Rails Engine)进行基于组件的Rails应用开发,以及如何对应用程序的大型模块进行拆分和模块化。以下是书中一些核心知识点的详细说明: 1....

    Rails相关电子书汇总

    标题 "Rails相关电子书汇总" 暗示了这个压缩包包含了关于Ruby on Rails框架的电子书籍资源。Ruby on Rails,通常简称为Rails,是一个基于Ruby语言的开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,以...

    rails 项目起步示例

    Rails是Ruby语言的一个著名Web开发框架,全称为Ruby on Rails,它遵循MVC(Model-View-Controller)架构模式,旨在提高开发效率和代码可读性。本示例"rails项目起步示例"是一个购物系统,非常适合初学者入门学习。 ...

Global site tag (gtag.js) - Google Analytics