小编jer*_*ink的帖子

在 Rails 开发中加载类后代

当我在本地进入 rails 控制台时,我需要能够从控制器中看到所有类的后代。我有这个Api::BaseController,我所有的 Api 控制器都继承自。我遇到的问题是,当我跳入 rails 控制台以检查后代中的 Api 控制器时,它一直是空的,直到我调用它们。这可能与开发中的类如何不急切加载有关,并且它们不在本地缓存。

sample_app$ rails c
Loading development environment (Rails 4.2.0)
2.1.5 :001 > Api::BaseController.descendants
 => []
2.1.5 :002 > Api::V1::FoosController
 => Api::V1::FoosController
2.1.5 :003 > Api::BaseController.descendants
 => [Api::V1::FoosController]
Run Code Online (Sandbox Code Playgroud)

从这个例子中,你可以看到当我Api::BaseController第一次调用后代时,它是一个空数组。在调用其中一个控制器之后,该类将被加载并显示为后代。在这种情况下,V1 以及 V2、V3 等中可能有任意数量的控制器......

作为一个愚蠢的丑陋的黑客,我可以做到

Dir.glob("#{Rails.root.join('app', 'controllers', 'api', 'v1')}/**/*.rb").each(&method(:require_dependency))
Run Code Online (Sandbox Code Playgroud)

但我不想每次进入控制台时都必须写。我也在研究一个 gem,绝对不想把这种代码放在我的 gem 中。

另一种选择是在开发中缓存类,但这本身会导致巨大的问题。谁有想法?

编辑 另一种选择是调用Rails.application.eager_load!. 如果我只能在我的 API 文件夹中指定控制器,这个选项就可以正常工作。这样我就不必急切加载整个应用程序,而只需加载我需要的一小部分控制器。

ruby ruby-on-rails

7
推荐指数
1
解决办法
3457
查看次数

管理木偶手的内存和性能

我正在使用puppeteer抓取一些页面,但是我很好奇如何在生产中为节点应用程序管理此页面。我一天最多要抓取500,000页,但是这些抓取作业将以随机的间隔发生,因此我无法耕种一个队列。

我想知道的是,打开浏览器,转到页面,然后在每个作业之间关闭浏览器会更好吗?我以为会慢很多,但也许可以更好地处理内存?

还是在应用启动时打开一个全局浏览器,然后转到页面,并用某种方法转储该页面(例如,关闭chrome中的所有标签,而不关闭chrome),然后在需要时重新打开一个新页面?这样看来会更快,但可能会消耗大量内存。

我从来没有使用过这个库,尤其是在生产环境中,所以我不确定是否需要注意。

node.js web-scraping puppeteer

7
推荐指数
3
解决办法
5423
查看次数

将Microsoft Timezone转换为rails中的标准时区数据

我有一个连接到SQL Server数据库的rails应用程序,并且有一个连接到同一个数据库的Windows桌面应用程序.Windows应用程序正在使用Microsoft Windows时区数据库,所以我得到一个时区名称Pacific Daylight Time.在rails中,ActiveSupport::TimeZone该类为我们提供了一个映射哈希,其中键将是Pacific Time (US & Canada),并且值将是America/Los_Angeles.有没有什么东西可以将Windows格式转换为标准格式,以便我可以使用Time.zone

或者是否有时区gem允许我配置rails以使用Windows格式?

这是一个我已经开始帮助转换的数组,但有一点我不是100%肯定.

  DAYLIGHT = [
{name: 'Dateline Daylight Time',          offset: -12,  alt: 'International Date Line West'},
{name: 'UTC-11',                          offset: -11,  alt: ''},
{name: 'Hawaiian Daylight Time',          offset: -10,  alt: 'Hawaii'},
{name: 'Alaskan Daylight Time',           offset: -9,   alt: 'Alaska'},
{name: 'Pacific Daylight Time (Mexico)',  offset: -8,   alt: ''},
{name: 'Pacific Daylight Time',           offset: -8,   alt: 'Pacific Time (US & Canada)'},
{name: 'US …
Run Code Online (Sandbox Code Playgroud)

timezone ruby-on-rails

6
推荐指数
1
解决办法
2448
查看次数