当我在本地进入 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 文件夹中指定控制器,这个选项就可以正常工作。这样我就不必急切加载整个应用程序,而只需加载我需要的一小部分控制器。
我正在使用puppeteer抓取一些页面,但是我很好奇如何在生产中为节点应用程序管理此页面。我一天最多要抓取500,000页,但是这些抓取作业将以随机的间隔发生,因此我无法耕种一个队列。
我想知道的是,打开浏览器,转到页面,然后在每个作业之间关闭浏览器会更好吗?我以为会慢很多,但也许可以更好地处理内存?
还是在应用启动时打开一个全局浏览器,然后转到页面,并用某种方法转储该页面(例如,关闭chrome中的所有标签,而不关闭chrome),然后在需要时重新打开一个新页面?这样看来会更快,但可能会消耗大量内存。
我从来没有使用过这个库,尤其是在生产环境中,所以我不确定是否需要注意。
我有一个连接到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)