小编Ben*_*Ben的帖子

Puma - Linux上的Rails //当进程死亡时重启

在rails应用程序上使用puma; 它有时会死于没有任何关节的原因; 部署时经常死亡(停止后不重启)

什么是一个很好的方法来监控进程是否死亡,并正确地重新启动它?在rails应用程序中调用; 我有一个方法可以为任何应用程序定义它.我没有找到任何可行的方法来做到这一点(看看systemd,其他Linux守护进程......没有成功)

谢谢,如有任何反馈

daemon upstart puma ruby-on-rails-4

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

kubernetes nginx入口控制器/静态资产缓存

我对通过在nginx入口控制器后面运行的应用返回的图像有问题。他们总是返回200,而不是预期的304。

到处挖掘,我发现了在服务器中添加特定块的功能。因此在元数据>注释下添加了以下内容:

 ingress.kubernetes.io/server-snippets: |
   location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
     expires 30d;
     add_header Pragma public;
     add_header Cache-Control "public";
   }
Run Code Online (Sandbox Code Playgroud)

问题仍然存在,因此仍然可以永久获得200;“ ssh'ing”到nginx pod并在创建的nginx.conf上做一只猫,我看不到此块出现在任何地方

因此,对于如何改进它有些迷失。我正在使用kube-lego,但没有发现是否会对这里产生影响

caching nginx etags kubernetes

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

Ruby vs.Go / sha256 hmac base64编码的字符串不匹配

我正在尝试创建一个红宝石客户端。

出于安全原因,我需要在网址上签名

这是go提供的示例:

package main

import (
    "crypto/hmac"
    "crypto/sha256"
    "encoding/base64"
    "fmt"
)

func main() {
  signKey := "ea79b7fd-287b-4ffe-b941-bf983181783f"
  urlPath := "/resize"
  url := "https%3A%2F%2Fxyz"
  urlQuery := "nocrop=true&type=jpeg&url=" + url + "&width=500"

  h := hmac.New(sha256.New, []byte(signKey))
  h.Write([]byte(urlPath))
  h.Write([]byte(urlQuery))
  buf := h.Sum(nil)
    fmt.Println(base64.RawURLEncoding.EncodeToString(buf)
}
Run Code Online (Sandbox Code Playgroud)

转换为红宝石,这使我们:

require 'openssl'
require 'base64'

signKey = "ea79b7fd-287b-4ffe-b941-bf983181783f"
urlPath = "/resize"
url = "https%3A%2F%2Fxyz"
urlQuery = "nocrop=true&type=jpeg&url=" + url + "&width=500"

digest = OpenSSL::Digest.new('sha256')
hmac = OpenSSL::HMAC.digest(digest, signKey, "#{urlPath}#{urlQuery}")
pp Base64.strict_encode64(hmac)
Run Code Online (Sandbox Code Playgroud)

我们快到了,但是有一个小问题,不知道这是由于openssl还是base64引起的,但是例如,当我通过go获得此信息时:

wClkWcUvI9ILs7noAr_HtnKpRCeeWBXE1Ne2C99sAco

我得到以下与红宝石版本:

wClkWcUvI9ILs7noAr/HtnKpRCeeWBXE1Ne2C99sAco=

使用红宝石,无论做什么,最终都会导致 =

当go使用下划线时,ruby使用反斜杠(这最后一个语句可能是由于对特定的ruby部分完全不了解的结果,但我们仅详细说明问题) …

ruby base64 openssl go hmac

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

capistrano + sidekiq /无法选择环境变量

因此,到目前为止,问题并不少见,但我仍然无法自行解决。

我有以下任务:

namespace :sidekiq do
      task :start do
        on roles(:app), in: :sequence, wait: 5 do
          within release_path do
            as :deploy  do
              with rails_env: fetch(:rails_env) do
                execute :bundle, "exec sidekiq -e production -C ./config/sidekiq.yml -L ./log/sidekiq.log -d"
              end
            end
          end
        end
      end
end
Run Code Online (Sandbox Code Playgroud)

namespace :deploy do ... end在主deploy.rb文件中调用该任务

由于我的数据库凭据存储在〜/ .profile中的远程计算机上,因此sidekiq无法运行(我试图将这些环境变量放在〜/ .bashrc中,依此类推……无论发现问题…无济于事。我几乎已经做了一切可能的事情。

显然,如果我在远程计算机上而不是通过capistrano 运行_very_相同的命令,则一切运行正常。我最终遇到了这个可怜的人:

task :start do
  run_locally do
    %x(ssh deploy@#{fetch(:application)} 'cd /var/www/#{fetch(:application)}/current && /home/xx/.rvm/bin/rvm 2.4.0 do bundle exec sidekiq -e production -C /var/www/#{fetch(:application)}/current/config/sidekiq.yaml -L /var/www/#{fetch(:application)}/current/log/sidekiq.log -d')
   end
end …
Run Code Online (Sandbox Code Playgroud)

ruby deployment capistrano ruby-on-rails capistrano3

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

Rails5 / 强参数 / 带有“动态”键的 json 列

谷歌搜索,发现了很多潜在的解决方案来正确处理它,最终得到了以下有效的解决方案

    def item_params
      load_params = params.require(:item).permit(
        :title,
        :content
      )
      load_params[:meta] = params[:item][:meta] if params[:item][:meta]
      load_params.permit!
    end
Run Code Online (Sandbox Code Playgroud)

使用这样的有效负载(查看控制台):

{
  "item" => {
    "title"=>"abc",
    "meta"=>{
      "fontcolor"=>"xyz",
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

日志仍然显示该字段是不允许的:

Unpermitted parameter: :meta
Run Code Online (Sandbox Code Playgroud)

不阻塞,它确实传递这些参数并正确保存,即使有警告也是如此。

不在相关列上使用序列化或任何序列化器,因为没有它它可以按预期工作(与大量谈论 json 列和序列化的帖子交谈,现在似乎不像以前那样需要)

这个解决方案在我这边不起作用,同样的警告,但元参数是否被阻止:

def item_params
  meta_keys = params[:item][:meta].keys
  params.require(:item).permit(:title, meta: meta_keys)
end
Run Code Online (Sandbox Code Playgroud)

因为这看起来有点随机,所以我对最终决定使用什么以及如何使用感到非常不舒服;如果有任何有信心的建议,非常感谢

postgresql json ruby-on-rails jsonb

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

如何在另一个记录数组的开头添加记录数组?

我有两个数据库记录数组.

我想将第二个添加到第一个的开头.

我查看了insert一个特定的indexx,但它会导致第二个数组插入第一个数组.

这可能不是那么难,但提前感谢任何帮助.

ruby arrays ruby-on-rails

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

Rubymotion x Facebook iOS SDK //安装问题// [!]无法找到`Facebook-iOS-SDK`的规范

在一台项目的另一台计算机上成功安装和使用SDK后,我很难让它在另一台工作站上运行,收到以下错误:

[!] Unable to find a specification for `Facebook-iOS-SDK`.
Run Code Online (Sandbox Code Playgroud)

SDK的版本是v3.5.1.

使用以下rakefile:

# -*- coding: utf-8 -*-
$:.unshift("/Library/RubyMotion/lib")
require 'motion/project'
require 'bundler'
require 'motion-cocoapods'
Bundler.require

Motion::Project::App.setup do |app|
  app.name = 'FacebookApp'
  app.frameworks    = ["UIKit", "Foundation", 'AdSupport', 'Accounts', 'Social']
  app.weak_frameworks += %w{ AdSupport Accounts Social }
  app.pods do
    pod 'Facebook-iOS-SDK'
  end
  app.device_family          = :iphone
  app.interface_orientations = [:portrait]
  app.info_plist['FacebookAppID'] = 'xxx'
  app.info_plist['URL types'] = { 'URL Schemes' => 'fb://profile/xxx'}
  app.identifier = 'xxx'
end
Run Code Online (Sandbox Code Playgroud)

以下Gemfile:

# A sample Gemfile
source "https://rubygems.org"
gem "motion-cocoapods", "1.3.0.rc1" …
Run Code Online (Sandbox Code Playgroud)

ruby sdk ios facebook-c#-sdk rubymotion

0
推荐指数
1
解决办法
2276
查看次数

ruby /从定义的索引中对哈希数组进行排序

拥有以下数组,它定义了排序:

[300, 450, 345, 23]
Run Code Online (Sandbox Code Playgroud)

以下数组,未分类:

[
  {id: 450, title: 'rand1'},
  {id: 23, title: 'rand3'},
  {id: 300, title: 'rand0'},
  {id: 345, title: 'rand2'},
]
Run Code Online (Sandbox Code Playgroud)

我希望第一个数组成为对我的第二个数组进行排序的"规则"(可能是通过匹配id键).

我怎样才能干净利落地实现这一目标?

ruby arrays sorting

0
推荐指数
1
解决办法
64
查看次数

来自具有相同键的两个不同对象的ruby / merge-sum值

具有以下内容:

a = { k1: 10, k2: 20 }
b = { k1: 14, k2: 10 }
Run Code Online (Sandbox Code Playgroud)

我需要得到:

# Not sure if that's the right approach, but broken down in steps :

# c = { k1: a[k1] + b[k1], k2: a[k2] + b[k2] }
# c = { k1: 10 + 14, k2: 20 + 10 }
c = { k1: 24, k2: 30 }
Run Code Online (Sandbox Code Playgroud)

获得此结果的最合适方法是什么?

ruby hash sum

0
推荐指数
1
解决办法
28
查看次数

如何将数组居中于特定索引?

我想旋转一个数组,以便给定索引处的元素位于中间.比方说我有:

[0, 1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

以索引为中心4将产生:

[2, 3, 4, 0, 1]
Run Code Online (Sandbox Code Playgroud)

以索引为中心0将产生:

[3, 4, 0, 1, 2]
Run Code Online (Sandbox Code Playgroud)

ruby arrays

-1
推荐指数
1
解决办法
104
查看次数