小编ndb*_*ent的帖子

为什么没有为我的React类调用getInitialState?

我正在使用Babel的ES6课程.我有一个看起来像这样的React组件:

import { Component } from 'react';

export default class MyReactComponent extends Component {
  getInitialState() {
    return {
      foo: true,
      bar: 'no'
    };
  }

  render() {
    return (
      <div className="theFoo">
        <span>{this.state.bar}</span>
      </div>
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

它看起来不像getInitialState是被调用,因为我收到了这个错误:Cannot read property 'bar' of null.

javascript reactjs

32
推荐指数
2
解决办法
1万
查看次数

如何使用Gemfile在Rails 3应用程序中自动加载gemspec依赖项

我有一个Rails 3应用程序,我正在变成一个Rails引擎/宝石.这个引擎有一些我已放在它的.gemspec文件中的gem依赖项.

我已经创建了一个新的'父'Rails 3应用程序,我想将我的引擎gem添加到Gemfile并让gem的依赖项自动"加载",但这对我不起作用!bundle install安装gem依赖项很好,但是当我启动服务器时,应用程序因为没有加载而崩溃.

例如,我的引擎的gemspec包含以下行:

s.add_runtime_dependency(%q<rails>, ["= 3.0.7"])
s.add_runtime_dependency(%q<acts_as_commentable>, [">= 3.0.1"])
s.add_runtime_dependency(%q<haml>, [">= 3.1.1"])
Run Code Online (Sandbox Code Playgroud)

..和父Rails 3应用程序在其Gemfile中有这些行:

source 'http://rubygems.org'

gem 'my_engine', :path => "~/src/gems/my_engine"
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

undefined local variable or method `acts_as_commentable'
from /home/user/src/gems/my_engine/app/models/account.rb:66:in `<class:Account>'
Run Code Online (Sandbox Code Playgroud)

但是,如果我添加gem 'acts_as_commentable', '>= 3.0.1'到父Rails 3应用程序的Gemfile,则加载gem并且错误消失.

我正在使用Rails 3.0.8.

有没有人有什么建议?我是否需要更改引擎加载方式?

gem dependencies rails-engines bundler ruby-on-rails-3

11
推荐指数
1
解决办法
4568
查看次数

当从专用NIC访问时,Rails将IP显示为127.0.0.1,但Nginx显示正确的IP.公共IP转发正常

我们在Unicorn + Nginx上运行Rails应用程序.服务器有两个我们使用的NIC.eth0处理对公共互联网的eth2请求,并处理来自我们专用网络的请求.

当请求通过时eth0,nginx日志显示公共IP,Rails日志也显示此IP.但是,当请求通过时eth2,nginx日志会正确显示私有IP(例如192.168.5.134),但Rails日志会显示127.0.0.1.

因此,似乎公共请求正确设置eth0X-Forwarded-For标头,但是对于请求没有发生这种情况eth2.

我们的nginx配置非常基本:

upstream example.com {
  server unix://var/www/example.com/shared/sockets/unicorn.socket fail_timeout=0;
}

...

server {
  listen 443 ssl;
  ...

  location @example.com  {
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real_IP $remote_Addr;
    proxy_set_header X-Forwarded_For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;

    if ($host ~* "^(.+)\.example.com$") {
      set $subdomain $1;
    }

    proxy_pass http://example.com;
  }
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

ip networking ruby-on-rails nginx unicorn

10
推荐指数
1
解决办法
1515
查看次数

在Redux操作中将数据放入"有效负载"键的优点是什么?

我没有在任何地方找到一个好的答案,这似乎是一个毫无意义的惯例.在许多教程和文档中,Redux操作定义如下:

{
  type: "ACTION_NAME",
  payload: {
    foo: 123,
    bar: 456,
  }
}
Run Code Online (Sandbox Code Playgroud)

什么是点payload对象?为什么不写这个:

{
  type: "ACTION_NAME",
  foo: 123,
  bar: 456,
}
Run Code Online (Sandbox Code Playgroud)

我正在使用Flow,我喜欢将所有动作类型定义为union,没有嵌套的有效负载:

type Action = {
  type: 'ACTION_NAME',
  foo: number,
  bar: number,
} | {
  type: 'ANOTHER_ACTION',
  someData: string,
} | {
  type: 'ONE_MORE_ACTION',      
  moreData: boolean,
}
Run Code Online (Sandbox Code Playgroud)

我没有payload这么多次打字,我得到了自动完成并对我的所有动作进行了类型检查,所以我不确定我缺少什么.

我没有把所有数据放在一个payload对象中,我错过了一些好处吗?

javascript reactjs flowtype redux

10
推荐指数
1
解决办法
565
查看次数

为什么“srb tc”没有为我的 RSpec 测试找到“expect”和“eq”方法?

我正在一个实验性开源项目 ( ruby_crystal_codemod ) 中试用 Sorbet 。我无法弄清楚如何让类型检查与嵌套测试项目中的某些 RSpec 测试一起使用。当我运行时srb tc,我看到一些像这样的类型检查错误:

spec/src/example_class_annotated_spec.rb:6: Method it does not exist on T.class_of(<root>) https://srb.help/7003
     6 |  it 'should add @foo and @bar' do
     7 |    instance = ExampleClass.new(2, 3, 4)
     8 |    expect(instance.add).to eq 5
     9 |  end

spec/src/example_class_annotated_spec.rb:8: Method expect does not exist on T.class_of(<root>) https://srb.help/7003
     8 |    expect(instance.add).to eq 5
            ^^^^^^^^^^^^^^^^^^^^
    https://github.com/sorbet/sorbet/tree/67cd17f5168252fdec1ad04839b31fdda8bc6155/rbi/core/kernel.rbi#L2662: Did you mean: Kernel#exec?
    2662 |  def exec(*args); end
            ^^^^^^^^^^^^^^^

spec/src/example_class_annotated_spec.rb:8: Method eq does not exist on T.class_of(<root>) https://srb.help/7003 …
Run Code Online (Sandbox Code Playgroud)

ruby types typechecking sorbet

9
推荐指数
1
解决办法
146
查看次数

在两个嵌套的子类中调用super.viewDidLoad()时,我正在使用Swift进行无限循环

我正在开发一个用Swift编写的iOS应用程序.我有一个UITabBarController的子类,然后是一个嵌套的子类:

class HWTabBarController: UITabBarController {
    override func viewDidLoad() {
        super.viewDidLoad()
        ...
    }
}

class MainTabBarController: HWTabBarController {
    override func viewDidLoad() {
        super.viewDidLoad()
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

这在iOS模拟器中运行良好,甚至在我在iPhone上调试应用程序时也是如此.但是当我将应用程序存档并使用TestFlight将其发送到我的手机时,它会崩溃.

我的崩溃日志充满了这个无限循环:

22  HDWR                           0x00145e10 @objc HDWR.MainTabBarController.viewDidLoad (HDWR.MainTabBarController)() -> () (MainTabBarController.swift:16)
23  HDWR                           0x00262867 NRMA__voidParamHandler
24  HDWR                           0x0014ea00 HDWR.HWTabBarController.viewDidLoad (HDWR.HWTabBarController)() -> () (HWTabBarController.swift:24)
25  HDWR                           0x00145e10 @objc HDWR.MainTabBarController.viewDidLoad (HDWR.MainTabBarController)() -> () (MainTabBarController.swift:16)
26  HDWR                           0x00262867 NRMA__voidParamHandler
27  HDWR                           0x0014ea00 HDWR.HWTabBarController.viewDidLoad (HDWR.HWTabBarController)() -> () (HWTabBarController.swift:24)
28  HDWR                           0x00145e10 @objc HDWR.MainTabBarController.viewDidLoad (HDWR.MainTabBarController)() -> () (MainTabBarController.swift:16)
29  HDWR …
Run Code Online (Sandbox Code Playgroud)

crash subclass ios swift

5
推荐指数
2
解决办法
1111
查看次数

在AVCaptureMovieFileOutput实例上不能多次调用startRecordingToOutputFileURL

我目前正在iOS 8,iPhone 6上进行测试。我正在从Swift调用这些API。

我试图弄清楚为什么我不能startRecordingToOutputFileURL在的单个实例上多次调用AVCaptureMovieFileOutput

  • stopRecording要先打电话,startRecordingToOutputFileURL然后再打电话。
  • 我在致电之前删除了临时视频文件startRecordingToOutputFileURL

第一次,我打电话startRecordingToOutputFileURL时,didStartRecordingToOutputFileAtURL委托回调被触发。当我打电话时stopRecordingdidFinishRecordingToOutputFileAtURL回调被触发。

此后,我删除了临时文件。

然后,当我startRecordingToOutputFileURL下次调用时,不会触发委托回调。当我stopRecording第二次调用时,“完成”回调也不会触发。

用于startRecordingToOutputFileURL苹果文档说以下内容:

在iOS中,不支持此框架精确的文件切换。您必须再次调用stopRecording才能再次调用此方法,以避免出现任何错误。

但是我打电话 stopRecording再次之前先进行调用,但它不起作用。

我当前的解决方法是删除AVCaptureMovieFileOutput连接,初始化一个新实例AVCaptureMovieFileOutput,然后建立新的连接。这很糟糕,因为它需要很长时间并且会冻结视频预览。

如果您知道为什么会发生这种情况,并且有解决办法,请告诉我。

更新:我只是注意到,如果我将其切换AVCaptureSession sessionPresetAVCaptureSessionPresetPhoto然后再回到AVCaptureSessionPresetHigh,则可以再次开始捕获视频。

更新2:这是我可以解决此问题的另一种方法:

    captureSession.stopRunning()
    captureSession.startRunning()
Run Code Online (Sandbox Code Playgroud)

更新3:事实证明,这似乎与捕获音量按钮的某些代码有关-JPSVolumeButtonHandler。当我注释掉开始的代码时,不会发生这种情况JPSVolumeButtonHandler

avfoundation ios avcapturesession avcapturemoviefileoutput swift

5
推荐指数
0
解决办法
714
查看次数

在 React Native JavaScript 应用中,如果我创建一个临时变量而不是直接返回一个值,为什么 Android GC 行为会改变?

我觉得 Android GC、JavaScriptCore 或 Genymotion 中的某个地方可能存在错误。我正在 Android 上测试 React Native 应用程序,所以我的所有代码都是用 JavaScript(而不是 Java)编写的。我试图找出我在以下 Android 模拟器上重现的崩溃:

  • 三星 Galaxy S6 - 6.0.0 - API 23
  • 谷歌 Nexus 5X - 7.1.0 - API 25

我注意到我的应用程序在使用大约 5 分钟后总是崩溃。使用 查看日志后adb logcat,我注意到它总是在 GC 运行后立即崩溃。它只在 Android 上崩溃,而在 iOS 上从未发生过崩溃。它也只有在“远程调试 JS”关闭时才会发生,我才意识到原因。这是因为当启用“远程调试 JS”时,所有 JS 都在我的笔记本电脑上的 Chrome 中运行,在 V8 引擎中。(这使得调试非常困难!)

我正在使用reselect库,但我使用了一个带有可配置“cacheSize”的分支来存储多个结果,而不是仅仅缓存一个结果。你可以在这里看到我的新defaultMemoize功能。我的第一个想法是我在这里做错了什么,但我没有使用 aWeakMap或类似的东西。我只是将缓存的结果存储在一个普通数组中,并且我总是持有对选择器的引用,所以我认为 GC 不应该清除内存。

我将描述有关我的应用程序的更多详细信息。我有一个LookupTable类,它引用一个Matrix类。查找表预先计算了一些东西以加快查找速度。

我的查找表代码如下所示:

// @flow
import autobind from 'autobind-decorator'

export …
Run Code Online (Sandbox Code Playgroud)

javascript android garbage-collection react-native

5
推荐指数
0
解决办法
594
查看次数

如何在运行 `rake db:migrate` 后立即防止任何 ActiveRecord::PreparedStatementCacheExpired 错误?

我正在开发 Rails 5.x 应用程序,并使用 Postgres 作为数据库。

rake db:migrate我经常在生产服务器上运行。有时,迁移会向数据库添加新列,这会导致某些控制器操作崩溃并出现以下错误:

ActiveRecord::PreparedStatementCacheExpired: ERROR: cached plan must not change result type
Run Code Online (Sandbox Code Playgroud)

这种情况发生在需要零停机时间的关键控制器操作中,因此我需要找到一种方法来防止这种崩溃发生。

我应该捕获ActiveRecord::PreparedStatementCacheExpired错误并重试吗save?或者我应该向这个特定的控制器操作添加一些锁定,以便在数据库迁移运行时不会开始服务任何新请求?

防止此类事故再次发生的最佳方法是什么?

database postgresql transactions ruby-on-rails database-migration

5
推荐指数
1
解决办法
2145
查看次数

为什么C99编译器没有将"!a && b"优化为"a <b"的布尔值?

我看到这个非常有趣的推文:

抵制我的代码高尔夫本能if(!bool1 && bool2)变成if(bool1<bool2)

我之前从未见过,所以我想看看编译器是否也会使用这种优化.我开始使用自述文件和测试C程序进行回购:https://github.com/ndbroadbent/gcc_experiments

这是测试程序:

#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>

int main(int argc, const char* argv[]) {
  if(argc != 3) {
    printf("Usage: %s <a> <b>\n", argv[0]);
    exit(1);
  }
  bool a = strtol(argv[1], NULL, 10) != 0;
  bool b = strtol(argv[2], NULL, 10) != 0;

  if (!a && b) {
    printf("!a && b == true (a: %d, b: %d)\n", a, b);
  } else {
    printf("!a && b == false (a: %d, …
Run Code Online (Sandbox Code Playgroud)

c boolean-logic boolean compiler-optimization

3
推荐指数
1
解决办法
113
查看次数

如何使用Carrierwave和MiniMagick(Ruby on Rails)将PDF转换为图像数组

我正在将上传的PDF转换为图像,每页只有一个图像.我已经弄清楚如何使用生成图像MiniMagick::Tool::Convert,但我不知道如何version为Uploader 编写块,以便我可以访问图像URL数组.

到目前为止,这是我的上传者:

class DocumentUploader < CarrierWave::Uploader::Base
  include CarrierWave::MiniMagick

  storage :file
  # storage :fog

  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  version :jpg do
    process :convert_to_images
    process :set_content_type_jpg

    def convert_to_images(*args)
      image = MiniMagick::Image.open(current_path)
      image.pages.each_with_index do |page, index|
        MiniMagick::Tool::Convert.new do |convert|
          convert.background 'white'
          convert.flatten
          convert.density 300
          convert.quality 95
          convert << page.path
          convert << "#{CarrierWave.root}/#{store_dir}/image-#{index}.jpg"
        end
      end
    end
  end

  def set_content_type_jpg(*args)
    self.file.instance_variable_set(:@content_type, "image/jpg")
  end

  # Add a white list of extensions which are allowed to be uploaded.
  def extension_white_list
    %w(jpg jpeg …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails image imagemagick carrierwave minimagick

2
推荐指数
1
解决办法
1322
查看次数