gpt4 book ai didi

ruby-on-rails - 大型 Rails 应用程序启动时间

转载 作者:数据小太阳 更新时间:2023-10-29 08:14:02 26 4
gpt4 key购买 nike

我有一个非常非常大的 Rails 应用程序,我已经阅读了那里关于如何减少启动时间的每篇文章,每篇文章都建议减少模型、 Controller 或 gem,但所有这些都在使用中。

我面临的问题是 heroku 推送 R10 错误代码,因为我的应用加载时间超过 60 秒。

我一直在尝试一件事,几乎成功了。我正在尝试运行 Bundler.require 和 Application.inialize!在线程中(后一个线程等待第一个线程完成)。这样做的好处是瘦服务器几乎可以立即启动。

问题是,当有人向应用程序发出请求时,初始化过程仍未完成。知道我该如何实现吗?

最佳答案

您可以通过扩展 initialize! 来控制初始化过程config/application.rb 中的方法.

看看这个sample application.rb file来自github项目。您应该能够扩展 initialize! class Application < Rails::Application 内部的方法范围。

您可以从 Rails Initialization docs 中获取基本方法在第 2.3 节中的 railties/lib/rails/application.rb。因此,如果您扩展这些方法并将它们保留为默认实现,那么您将拥有这些。

class Application < Rails::Application
def initialize!(group=:default) #:nodoc:
raise "Application has been already initialized." if @initialized
run_initializers(group, self)
@initialized = true
self
end

def run_initializers(group=:default, *args)
return if instance_variable_defined?(:@ran)
initializers.tsort_each do |initializer|
initializer.run(*args) if initializer.belongs_to?(group)
end
@ran = true
end
end

此时您可以添加打印语句并确定卡在哪一 block 上。例如,是您的 @initialized变量永远不会设置为 true ?如果是这样,为什么?也许你被困在了 run_intializers 里面.如果是这样,那么您卡在了哪个初始化程序中?

关于ruby-on-rails - 大型 Rails 应用程序启动时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30666350/

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