gpt4 book ai didi

ruby-on-rails - 在开发模式下重新加载 Rails 3 初始值设定项

转载 作者:数据小太阳 更新时间:2023-10-29 07:07:59 27 4
gpt4 key购买 nike

我正在构建一个 Rails 3 应用程序,用户可以在其中选择多个模板之一并构建一个小网站。我试图在应用程序启动时初始化所有可用的模板。这本质上是一个文件,让我定义它们,然后为它们中的每一个调用 Template.add(template),然后将它们存储在 @@templates 中,我可以通过 Template.find(name) 访问它们。

问题是在开发模式下,我调用 Template.add 的初始化程序在第一个请求时加载,然后在 reload! 时被清除.我读过有关 config.to_prepare 的内容,但它对我不起作用,可能是因为我需要这样的模板:

# template config at app/templates/template_name/template_name.rb
path = File.expand_path(Rails.root + 'app/templates')
Dir[File.join(path, '/*')].each do |template|
name = File.basename(template)
require File.join(path, name, "#{name}.rb")
end

我该怎么做才能在 reload! 之后重新加载这些文件,或者让它们完全不被丢弃?另外,如果您有更好的处理方法的建议,我会洗耳恭听。我仍然在 Rails 上站稳脚跟,尤其是在配置方面。

我通过在类中加载数据来暂时避免这个问题。把我从这种丑陋的、非模块化的肮脏事情中解救出来。

最佳答案

如果您将调用从 template_name.rb< 移至 Template.add,我认为您应该能够使用 config.to_prepare 执行此操作 文件(我假设它们现在所在的位置),然后进入您的加载代码,就在 require 之后。例如,考虑将此类方法添加到您的 Template 类中,然后甚至可能在它首次加载时从类本身调用它:

class Template
def self.load_all
# template config at app/templates/template_name/template_name.rb
path = File.expand_path(Rails.root + 'app/templates')
Dir[File.join(path, '/*')].each do |template|
name = File.basename(template)
require File.join(path, name, "#{name}.rb")

# Register the template even if the class itself is already loaded.
Template.add(name)
end
end

# Initially load all templates.
Template.load_all
end

然后从他们自己注册的 template_name.rb 文件中删除 Template.add(name) 代码。 (同样,我假设这是当前发生的地方 - 我对你原来的帖子不太清楚。)或者你可能只是想确保 Template.add 是幂等的并默默地丢弃重复项.

最后,将以下内容添加到config/environments/development.rb:

config.to_prepare do
Template.load_all
end

这将在 Template 类重新加载后重新加载所有模板。

我还没有尝试过,但是通过调用 Template.load_all 我建议在 Template 类的末尾,您甚至可能不需要 config.to_prepare 部分。

关于ruby-on-rails - 在开发模式下重新加载 Rails 3 初始值设定项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4924910/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com