ssh 配置不同key对应不同的git仓库

需求

我们有很多仓库账号,每个仓库的登录用户又不同,这个时候就需要使用多个ssh keys配置不同的仓库,否则将会出现权限问题

步骤

1.首先生成ssh key,参见生成ssk key.
2.配置config(~/.ssh/config)

1
2
3
4
5
6
7
8
Host            git.us.magento.cloud
Hostname git.us.magento.cloud
IdentityFile ~/.ssh/id_rsa_mage_cloud
IdentitiesOnly yes
Host ezup.github.com
Hostname github.com
IdentityFile ~/.ssh/id_rsa_ezup
IdentitiesOnly yes

如果都是使用github,建议别名项目仓库Host避免冲突,例如`git@ezup.github.com:e-zup/mag2_ezup.git`

apache使用php-fpm配置多版本

需求

有时候我们需要在同一台服务器配置多个php版本利于开发测试,我们可以直接使用他人做好的包直接安装配置,以deepin示例。

步骤

  1. 首先加入多版本php源
    1
    2
    3
    4
    sudo apt-get -y install apt-transport-https lsb-release ca-certificates
    sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
    sudo sh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
    sudo apt-get update

https://packages.sury.org/php/README.txt

  1. 安装apache和多版本php-fpm

    1
    sudo apt-get install apache2 php5.6-fpm php7.0-fpm php7.1-fpm
  2. 打开apache headersproxy_fcgi模块

    1
    sudo a2enmode headers proxy_fcgi

apachephp-fpm建议运行用户配置成当前登录账号,避免出现权限问题

  1. 配置虚拟域名
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <VirtualHost *:80>
    ServerName m1.mycoolcell.local
    ServerAlias m1.mycoolcell.local
    ServerAdmin webmaster@localhost
    DocumentRoot /home/dyl/website/mycoolcell_m1
    SetEnv MAGE_RUN_CODE wholesale
    SetEnv MAGE_RUN_TYPE website
    <FilesMatch "\.php$">
    <If "-f %{REQUEST_FILENAME}">
    SetHandler "proxy:unix:/run/php/php5.6-fpm.sock|fcgi://localhost/"
    </If>
    </FilesMatch>
    ErrorLog ${APACHE_LOG_DIR}/m1.mycoolcell.local.error.log
    CustomLog ${APACHE_LOG_DIR}/m1.mycoolcell.local.access.log combined
    </VirtualHost>

如果需要其他版本,将上面的php5.6-fpm.sock配置成php7.1-fpm.sock即可。

elasticsearch-tips

Tips

1
2
3
4
5
6
#show elasticsearch database
curl 'localhost:9200/_cat/indices?v'
#delete elasticsearch database
curl -XDELETE 'localhost:9200/xxxxxxx?pretty'
#set limit variable
curl -XPUT localhost:9200/_template/template_name -d '{"template": "*", "order": 0, "settings": {"index": {"mapping": {"total_fields": {"limit": 10000}}}}, "version": 1}'

ssh 必须使用账号密码登录方法

问题

当我们本地有很多私钥的时候,直接使用ssh xxx@xx.xx.xx.xx方式登录的时候会出现Too many authentication failures for xxx Authentication failed.的错误,所以当我们存在大量的私钥时,为了方便,可以使用免密登录(不在此文讨论范围),还可以必须使用账号密码登录。

解决办法

配置ssh配置文件,如debian配置文件在/etc/ssh/ssh_config中,加入PubkeyAuthentication no到文件中即可。

magento2使用PayPal Payflow测试账号

  1. 访问开发文档搜索并点击Create a test-only Payflow Gateway account,继续点击Payflow Services开始创建账号,根据需要的类型选择支付处理公司,除了邮件其他随意填继续下一步到结束。完成后会有成功注册信息发送到邮箱。

  2. 根据邮件登录信息登录登录paypal payflow后台,

    • 点击
      Service Setting->Set Up->Payment Confirmation中,修改Show confirmation pagew为On my website,修改Return URL MethodPost。转到Security Options,修改Enable Secure TokenYes,保存;
    • 导航到Service Setting->Customize->Choose a layout and color,选择Layout C,然后保存发布(Save and Publish);
    • 导航到Account Administration->Manage Security->Transaction Settings,修改Allow reference transactionsYes,保存(Confirm);
  3. magento2后台配置paypal payflow后即可使用测试信用卡测试。

关于magento-cloud新项目无法pull代码的问题

问题

magento-cloud新项目添加magento-cloud ssh-key:add后仍然无法pull代码,

处理

解决方法如下:

1.需要配置~/.ssh/config文件,例如:

gedit ~/.ssh/config,

拷贝以下到~/.ssh/config

1
2
3
4
Host git.us-3.magento.cloud
Hostname git.us-3.magento.cloud
User tajmoznp6wqkq
IdentityFile /home/dyl/.ssh/id_rsa.2

2.获取公钥写入到~/.ssh/known_hosts中,终端执行以下命令:

1
ssh-keyscan -H git.us-3.magento.cloud >> ~/.ssh/known_hosts

magento2后台修改eav属性对应的模板

简介

很多情况下我们需要修改后台eav属性对应的模板文件。以下是通过修改模板文件让客户无法在后台修改multiple select,也就是disable multiple select。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!--
Silk/AdvancedEstimatedShippingDate/etc/adminhtml/di.xml
-->
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<virtualType name="Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\Pool" type="Magento\Ui\DataProvider\Modifier\Pool">
<arguments>
<argument name="modifiers" xsi:type="array">
<item name="esd" xsi:type="array">
<item name="class" xsi:type="string">Silk\AdvancedEstimatedShippingDate\Ui\DataProvider\Product\Form\Modifier\esd</item>
<item name="sortOrder" xsi:type="number">10</item>
</item>
</argument>
</arguments>
</virtualType>
</config>

接下来修改modifyMeta

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
//Silk\AdvancedEstimatedShippingDate\Ui\DataProvider\Product\Form\Modifier\esd
<?php
/**
* Created by PhpStorm.
* User: dyl
* Date: 18-4-17
* Time: 下午4:31
*/

namespace Silk\AdvancedEstimatedShippingDate\Ui\DataProvider\Product\Form\Modifier;
use Magento\Framework\Stdlib\ArrayManager;

class esd implements \Magento\Ui\DataProvider\Modifier\ModifierInterface
{
/**
* Container fieldset prefix
*/
const CONTAINER_PREFIX = 'container_';
/**
* @var ArrayManager
*/
protected $arrayManager;

/**
* esd constructor.
* @param ArrayManager $arrayManager
*/
public function __construct(ArrayManager $arrayManager)
{
$this->arrayManager = $arrayManager;
}

/**
* @param array $data
* @return array
*/
public function modifyData(array $data)
{
return $data;
}

/**
* @param array $meta
* @return array
*/
public function modifyMeta(array $meta)
{
$fieldCode = 'esd';
$elementPath = $this->arrayManager->findPath($fieldCode, $meta, null, 'children');
$containerPath = $this->arrayManager->findPath(static::CONTAINER_PREFIX . $fieldCode, $meta, null, 'children');
if (!$elementPath) {
return $meta;
}

$meta = $this->arrayManager->merge(
$containerPath,
$meta,
[
'arguments' => [
'data' => [
'config' => [
'formElement' => 'container',
'componentType' => 'container',
'breakLine' => false,
'label' => __('ESD'),
'required' => 0,
'sortOrder' => 320,
'scopeLabel' => __('[STORE VIEW]'),
],
],
],
'children' => [
$fieldCode => [
'arguments' => [
'data' => [
'config' => [
'dataType' => 'multiselect',
'formElement' => 'multiselect',
'elementTmpl' => 'Silk_AdvancedEstimatedShippingDate/ui/form/element/multiselect'
],
],
],
],
]
]
);
return $meta;
}
}

最后加上template文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<!--
Silk/AdvancedEstimatedShippingDate/view/base/web/template/ui/form/element/multiselect.html
-->
<!--
/**
* Copyright © 2013-2017 Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<select multiple class="admin__control-multiselect" data-bind="
attr: {
name: inputName,
id: uid,
size: size ? size : '6',
disabled: true,
'aria-describedby': noticeId,
placeholder: placeholder
},
hasFocus: focused,
optgroup: options,
selectedOptions: value,
optionsValue: 'value',
optionsText: 'label'"
/>

在Ubuntu下如何获取超级用户权限

由于 Ubuntu 是基于 Debian 的 linux 操作系统,在默认的情况下,是没有超级用户(superuser, root)的,但有些系统操作必须有超级用户的权限才能进行,如手动释放内存等。 在其他 linux 操作系统(如 fedora)下,可以使用 su 切换到超级用户。 当输入 su 命令后,系统会要求输入 root 的密码。 可是,在 Ubuntu 下我们根本不知道 root 的密码是什么。 这样,在 Ubuntu 下切换到超级用户需要使用其他方法,主要有两种: 1) sudo -i sudo 是 su 的加强版,意思是 do something as the supervisor。不需要密码就可以得到 root 的权限。 但是它也有很多限制,比如,在默认的情况下,只能在 5 分钟之内使用 root 权限。 2)如果想一直使用 root 权限,还是要使用 su,还是要得到 root 密码的。 用 sudo passwd root 可以设置 root 的密码。 之后就可以自由使用 su 命令啦。

探讨PHP函数ip2long转换IP时数值太大产生负数的解决方法

本篇文章是对PHP函数ip2long转换IP时数值太大产生负数的解决方法进行了详细的分析介绍,需要的朋友参考下 【造成原因】:Because PHP’s integer type is signed, and many IP addresses will result in negative integers. 【解决办法】:其官方手册中提到,可以“you need to use the “%u” formatter of sprintf() or printf() to get the string representation of the unsigned IP address” 即,printf( ‘%u’,ip2long(‘IP地址’ ) ); 或者将其先转换为二进制然后在转换为十进制,bindec(decbinip2long( ‘IP地址’ ) ) ); 【测试】

$strIp = '182.118.0.0';
echo ip2long($strIp); //此时输出的-1233780736
echo 'br/';
echo bindec( decbin( ip2long( $strIp ) ) ); // 输出3061186560,与MySQL函数输出一致~

【注】: number bindec ( string $binary_string ); //二进制转换为十进制 string decbin ( int $number ); //十进制转换为二进制

xunsearch同义词管理

Indexer.php 添加同义词

添加同义词

通过带参数的选项 --add-synonym 来实现,参数值为单条或多条同义词记录,每条记录之间用冒号(:) 分隔原词和同义词,多条记录之间用逗号分割。您可以对同一个“原词”增加多个不同的“同义词”, 如果库内已存在完全一致的记录,则指令不起作用也不会报错。用法如下:

# 给 search 增加同义词 find
util/Indexer.php demo –add-synonym search:find

# 再给 search 增加另一个同义词 seek
util/Indexer.php demo –add-synonym search:seek

# 给 “搜索” 增加 “检索” “查找” 两个同义词
util/Indexer.php demo -add-synonym 搜索:检索,搜索:查找

# 给 “Hello world” 增加同义词 “你好”,参数含空格请用引号包围
util/Indexer.php demo –add-synonym “Hello world:你好”

删除同义词

删除同义词作法和添加同义词很相似,只不过采用选项 --del-synonym,同时参数中的同义词可以 省略表示删除该“原词”的所有同义词记录。用法如下:

# 删除 search 的全部同义词、同时删除 “搜索” 的同义词 “检索”
util/Indexer.php demo –del-synonym search,搜索:检索