在rails应用程序上使用puma; 它有时会死于没有任何关节的原因; 部署时经常死亡(停止后不重启)
什么是一个很好的方法来监控进程是否死亡,并正确地重新启动它?在rails应用程序中调用; 我有一个方法可以为任何应用程序定义它.我没有找到任何可行的方法来做到这一点(看看systemd,其他Linux守护进程......没有成功)
谢谢,如有任何反馈
我对通过在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,但没有发现是否会对这里产生影响
我正在尝试创建一个红宝石客户端。
出于安全原因,我需要在网址上签名
这是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部分完全不了解的结果,但我们仅详细说明问题) …
因此,到目前为止,问题并不少见,但我仍然无法自行解决。
我有以下任务:
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) 谷歌搜索,发现了很多潜在的解决方案来正确处理它,最终得到了以下有效的解决方案
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)
因为这看起来有点随机,所以我对最终决定使用什么以及如何使用感到非常不舒服;如果有任何有信心的建议,非常感谢
我有两个数据库记录数组.
我想将第二个添加到第一个的开头.
我查看了insert
一个特定的indexx,但它会导致第二个数组插入第一个数组.
这可能不是那么难,但提前感谢任何帮助.
在一台项目的另一台计算机上成功安装和使用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) 拥有以下数组,它定义了排序:
[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键).
我怎样才能干净利落地实现这一目标?
具有以下内容:
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)
获得此结果的最合适方法是什么?
我想旋转一个数组,以便给定索引处的元素位于中间.比方说我有:
[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 ×7
arrays ×3
base64 ×1
caching ×1
capistrano ×1
capistrano3 ×1
daemon ×1
deployment ×1
etags ×1
go ×1
hash ×1
hmac ×1
ios ×1
json ×1
jsonb ×1
kubernetes ×1
nginx ×1
openssl ×1
postgresql ×1
puma ×1
rubymotion ×1
sdk ×1
sorting ×1
sum ×1
upstart ×1