小编edw*_*dmp的帖子

ActionCable不再在生产环境中工作

我有一个Rails 5应用程序,Action Cable用于websocket功能.

在我的开发环境中,一切都按预期工作,浏览器客户端成功连接到Action Cable通道.

在我的生产环境Action Cable中,某些时候正在工作,但突然停止运行,没有任何明显的原因.

如果我在我的开发机器上运行应用程序时更改RAILS_ENVproduction正常Action Cable工作.在实际的生产机器上运行应用程序时似乎有些不同,尽管基本环境是相同的.

我在Chrome控制台中看到的具体错误:

mydomain.com/:1 WebSocket connection to 'wss://mydomain.com/cable' failed: WebSocket is closed before the connection is established.我在其他浏览器中遇到类似的错误,因此它似乎与浏览器无关.我在测试时禁用了任何广告拦截器以确保它们不会干扰.

Development.rb ENV相关设置:

config.action_cable.url = "ws://localhost:#{port}/cable"
Run Code Online (Sandbox Code Playgroud)

Production.rb ENV相关设置:

hostname = ENV.fetch('HOSTNAME')
  port = ENV.fetch('PORT')
  base_url = "#{hostname}:#{port}"

  config.action_cable.url = "wss://#{hostname}/cable"
  config.action_cable.allowed_request_origins = ["https://#{base_url}", "https://#{hostname}"]
Run Code Online (Sandbox Code Playgroud)

Puma用作网络服务器.Web服务器提供安装了有效证书的SSL连接.在生产机器上,Puma在端口上为应用程序提供服务,3000但这会转发到443路由器中的端口.

在我的开发机器和生产中运行应用程序的唯一显着区别是使用生产SSL.

ssl ruby-on-rails websocket puma actioncable

23
推荐指数
1
解决办法
2932
查看次数

Rails中的多线程:在自动加载常量时检测到循环依赖性

我有一个Rails应用程序,其中我有一个Rake任务,它使用concurrent-ruby gem提供的多线程函数.

我不时会遇到Circular dependency detected while autoloading constant错误.

在谷歌搜索了一下后,我发现这与使用线程结合加载Rails常量有关.

我偶然发现了以下GitHub问题:https://github.com/ruby-concurrency/concurrent-ruby/issues/585https://github.com/rails/rails/issues/26847

正如这里所解释的,你需要包装从一个Rails.application.reloader.wrap do或一个Rails.application.executor.wrap do块中的新线程调用的任何代码,这就是我所做的.但是,这会导致死锁.

然后建议ActiveSupport::Dependencies.interlock.permit_concurrent_loads用于在主线程上包装另一个阻塞调用.但是,我不确定应该用哪个代码包装.

这是我尝试过的,但这仍然会导致死锁:

@beanstalk = Beaneater.new("#{ENV.fetch("HOST", "host")}:#{ENV.fetch("BEANSTALK_PORT", "11300")}")
tube_name = ENV.fetch("BEANSTALK_QUEUE_NAME", "queue")

pool = Concurrent::FixedThreadPool.new(Concurrent.processor_count * 2)

# Process jobs from tube, the body of this block gets executed on each message received
@beanstalk.jobs.register(tube_name) do |job|
    ActiveSupport::Dependencies.interlock.permit_concurrent_loads do
      @logger.info "Received job: #{job.id}"
      Concurrent::Future.execute(executor: pool) do
        Rails.application.reloader.wrap do
          # Stuff that references Rails constants etc
          process_beanstalk_message(job.body) …
Run Code Online (Sandbox Code Playgroud)

ruby multithreading ruby-on-rails concurrent-ruby

14
推荐指数
3
解决办法
3788
查看次数

在某些情况下,在Rails中呈现错误的部分,可能是片段缓存问题

我有一个显示事件列表的模板

<tbody>
<%= render partial: 'event', collection: events, cached: true %>
</tbody>
Run Code Online (Sandbox Code Playgroud)

部分event:

<% cache event do %>
  <tr>
    <td>
      Something
    </td>
    <td>
      <%= render 'identifiable_link_with_tag', identifiable: event.identifiable %>
    </td>
  </tr>
<% end %>
Run Code Online (Sandbox Code Playgroud)

部分identifiable_link_with_tag:

<% cache identifiable do %>
    <span class="badge badge-info"><%= identifiable.type %></span> <%= link_to identifiable.identifier, identifiable %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

现在,奇怪的是接下来的事情.有时我会在事件视图中注意到,对于某些事件,identifiable会呈现另一个partial()而不是identifiable_link_with_tag:_identifiable.这似乎很奇怪,在列出25个事件的页面上,这只会发生在1或2或3(或0)个事件中.

简而言之,似乎有时会出现错误的可识别.我确实使用Rails片段缓存,因此这可能是一个因素.我错过了什么或者我遇到过Rails错误吗?这个问题很难在开发中重现,因此难以调试.

ruby-on-rails fragment-caching ruby-on-rails-5 ruby-on-rails-5.1

8
推荐指数
0
解决办法
201
查看次数

Watch App通知的有效负载

在Xcode中创建新的Apple Watch应用程序时,会创建以下APNS有效负载示例:

{
    "aps": {
        "alert": {
            "body": "Test message",
            "title": "Optional title"
        },
        "category": "myCategory"
    },

    "WatchKit Simulator Actions": [
        {
            "title": "First Button",
            "identifier": "firstButtonAction"
        }
    ],

    "customKey": "Use this file to define a testing payload for your notifications. The aps dictionary specifies the category, alert text and title. The WatchKit Simulator Actions array can provide info for one or more action buttons in addition to the standard Dismiss button. Any other top level keys are custom payload. …
Run Code Online (Sandbox Code Playgroud)

apple-push-notifications ios watchkit

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

UITableViewCell中的CALayer阴影绘制不正确

我正在使用CALayer将阴影应用于UITableViewCell.

这是我的代码:

- (void)addShadowToView:(UIView *)view
{
    // shadow
    view.layer.shadowColor = [[UIColor colorWithWhite:0.0f alpha:0.1f] CGColor];
    view.layer.shadowOpacity = 1.0f;
    view.layer.shadowOffset = CGSizeMake(0.0f, 3.0f);
    view.layer.shadowRadius = 6.0f;

    CGRect shadowFrame = view.layer.bounds;
    CGPathRef shadowPath = [UIBezierPath bezierPathWithRect:shadowFrame].CGPath;
    view.layer.shadowPath = shadowPath;
}
Run Code Online (Sandbox Code Playgroud)

问题是对于某些tableviewcells,阴影不会跨越单元格的整个宽度.对于某些细胞来说,这是正确的,对于其他细胞则是错误的.我注意到设备的旋转也会影响它,并且重新加载tableview数据有时会解决它.

缓解此问题的最佳方法是什么(并且我不是要在每次轮换时重新加载整个tableview等)?

正确应用阴影的单元格底部示例: 在此输入图像描述

向下滚动后同一个tableview中的单元格底部(阴影仅应用于宽度的前75%): 在此输入图像描述

编辑:我注意到问题是由这些代码行引起的:

CGRect shadowFrame = view.layer.bounds;
CGPathRef shadowPath = [UIBezierPath bezierPathWithRect:shadowFrame].CGPath;
view.layer.shadowPath = shadowPath;
Run Code Online (Sandbox Code Playgroud)

如果我把它们抛弃,一切都很好.但是我被告知使用它时会有一些性能上的好处.不知何故,旋转后阴影未正确应用于新尺寸.

objective-c uitableview calayer ios

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

在同一请求期间使用 HikariCP 获取后续连接似乎很慢

我有一个 Spring boot 应用程序,它使用 HikariCP 进行 Postgres 连接池。

最近,我设置了跟踪来收集一些数据,了解处理对特定端点的请求时所花费的时间。

我的假设是,当使用 HikariCP 时:

  1. 处理请求时第一次连接数据库可能会慢一些
  2. 与数据库的后续连接应该很快(< 10 毫秒)

然而,正如跟踪所示,第一个连接速度很快(< 10 ms)。虽然同一请求处理期间的一些后续连接也很快(< 10 毫秒),但我经常看到一些后续连接需要 50-100 毫秒,这对我来说似乎相当慢,尽管我不确定这是否是预期的或不是。

我可以配置什么来改善这种行为吗?

也许很高兴知道:

  • 有问题的后端现在并没有真正看到任何其他流量,因此它仅在我手动向其发送请求时处理流量
  • 我已将 MaximumPoolSize 更改为 1,以排除问题是它在 1 个请求的上下文中使用不同的连接,这就是导致问题的原因。仍然可以看到相同的行为。

我使用默认的 Hikari 设置,不更改它们。

痕迹截图

postgresql spring connection-pooling spring-boot hikaricp

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

iTunes Connect不会要求更新屏幕截图?

我更新了我的iPhone应用程序以支持iPhone 5屏幕..

我之前为另一个应用程序做过这个,我被迫上传用iPhone 5拍摄的新截图.

但是,这一次,iTunes Connect只显示"等待审核"状态,并且没有提及任何有关屏幕截图的信息.

我有点担心出了什么问题?应用程序适用于iPhone 5和模拟器.

xcode itunesconnect objective-c

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

圆形特定角,仅在特定边上显示阴影

我有以下代码只围绕视图的特定角:

- (void)roundOnlySpecifiedCornersInView:(UIView *)view corners:(UIRectCorner)corners
{
    UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:view.bounds byRoundingCorners:(corners) cornerRadii:CGSizeMake(4.0, 4.0)];
    CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];

    maskLayer.path  = maskPath.CGPath;
    view.layer.mask = maskLayer;
}
Run Code Online (Sandbox Code Playgroud)

这完全孤立地工作.现在我在想法中也想要阴影,但我特别想在不同的情况下应用阴影:

  • 在各方面
  • 所有方面除了底部
  • 除顶部外的所有方面
  • 仅限左/右侧

我遇到的所有技术都是通过创建视图的插图来完成的.这个的问题是,假设你只想在左/右侧保持阴影,你偏移底部和顶部.由于Rect现在不太高,左右的阴影不会覆盖视图的整个高度.此外,用于圆角的遮罩层会导致阴影不再出现.

示例代码:

    innerView.layer.shadowColor = [[UIColor colorWithWhite:0.0f alpha:0.1f] CGColor];
    innerView.layer.shadowOpacity = 1.0f;
    innerView.layer.shadowOffset = CGSizeMake(0.0f, 0.0f);
    innerView.layer.shadowRadius = 6.0f;

    CGRect shadowFrame = UIEdgeInsetsInsetRect(innerView.bounds, UIEdgeInsetsMake(9, 0, 9, 0));
    CGPathRef shadowPath = [UIBezierPath bezierPathWithRect:shadowFrame].CGPath;

    innerView.layer.shadowPath = shadowPath;
Run Code Online (Sandbox Code Playgroud)

如何在视图中对特定角进行圆角处理,同时仅在指定边显示阴影?

Swift中的答案也很受欢迎!

我想要的截图(这个很简单,因为所有角都需要圆角所以我可以使用.layer.cornerRadius它并且它在所有边都有阴影): 在此输入图像描述

现在我只想围绕2个角(左上角和右上角,左下角和右下角)并仅向某些边添加阴影.

objective-c uiview ios uibezierpath

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

在应用程序包中包含JVM的副本

我有一个OS X objective-c应用程序,它以编程方式调用Java命令来运行Java程序.

如果我是正确的,默认情况下不再在OS X上安装Java.我想发送我的应用程序而不是强制用户下载Java才能使用该应用程序.

如何发送java可执行文件的副本以及runtime(rt.jar).当然我可以rt.jar在应用程序包中复制,但是那个java二进制文件呢?我也可以复制一下吗?

java xcode jvm objective-c nsbundle

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

去模块:校验和不匹配

我最近开始在Go中使用模块,但是我经常遇到一台机器上一切正常的问题,但是在另一台机器上构建代码库时遇到校验和不匹配.

该问题始终涉及相同的第三方依赖关系(github.com/ericlagergren/decimal):

go: verifying github.com/ericlagergren/decimal@v0.0.0-20181231230500-73749d4874d5: checksum mismatch
    downloaded: h1:HQGCJNlqt1dUs/BhtEKmqWd6LWS+DWYVxi9+Jo4r0jE=
    go.sum:     h1:x4oNpFLLl+8l+iLgksNHzZewTS0SKp6m0hlLwzXRbqA=
Run Code Online (Sandbox Code Playgroud)

我尝试了各种各样的东西:删除和重新生成go.sum,升级Go自己到最新的补丁版本并删除依赖,go.mod但似乎没有解决这个问题.

有谁知道如何解决这个问题?

go go-modules

5
推荐指数
3
解决办法
5213
查看次数