• shopify模板开发从入门到放弃(1): 注册开发者店铺、开发者工具适配

    这个课程是为有对外贸电商领域有兴趣的小伙伴们准备的,主要就是告诉大家怎样通过shopify的liquid语法构建出属于自己的shopify商城模板,当然小伙伴们在学习完以后也可以对一些模板进行自定义的二次开发喽! 主要大纲 shopify开发者店铺注册 开发者工具适配(phpstorm) 1. shopify开发者店铺注册 进入shop partner 注册开发者店铺 在这之前需要小伙伴先注册shopify合作伙伴 访问 https://partners.shopify.com/signup 进行注册即可 中间可能有邮箱认证的步骤 a. 选择development store开发者店铺 b. 选择test an app or theme c. 进入后台,注意我们的后台地址名字 https://williamstart.myshopify.com/admin 到此我们的开发者店铺就全部搞定了 2. 开发者工具适配(phpstorm) 因为笔者最常用的是phpstorm这款开发者工具所以这里就采用了phpstorm作为我们shopify模板的开发工具 a. 先安装twig插件(liquid的语法与twig是一致的) b. 然后发开Editor->filetype 找到twig项目然后在下面的文件后缀栏目加上liquid文件后缀,这样既可以识别shopify的liquid文件内容了 下面是识别后的示例: 最后建议大家也可以用vscode 但是要安装下面的插件

    December 29, 2020 0 0
  • 1. ngnix lua开发专版:ngx_lua运行机制的分析(lua是如何嵌入到nginx请求处理流程里面的)

    主要分析流程 ngnix特点 ngx_lua的特点分析 nginx的http请求流程分析 基于nginx流程的ngx_lua生命周期分析 1. nginx特点 nginx是模块化的结构,每个模块之间并没有强耦合,这也方便了开发者对其进行定制化开发,但是如果我们用c和c++去开发nginx内嵌的程序,我们需要符合 Nginx 的开发规则和数据结构使用,而且需要我们熟悉Nginx源码,再加上调试的复杂度,会极大影响我们的开发周期与效率 1. ngx_lua的特点分析 ngx_lua属于openresty的内部模块,通过这个模块将lua内嵌如nginx的结构中。Lua内建协程,通过协程的挂起与唤醒可以很好的通过回调函数的形式把异步的调用同步化,我们都知道nginx的高性能取决于全异步的调用方式,lua就可以通过协程的方式调用异步的api从而使使用者可以用同步编程的方式编写高性能的异步程序,而且并不影响nginx本身的性能。 ngx_lua把耗时且阻塞的I/O操作都委托给 Nginx 事件模型,从而实现完全的非阻塞调用 协程在挂起时自动保存上下文,工作进程上的 VM 可以处理下一个协程的任务层事件模型完成任务时,根据回调,对应的例程会被恢复上下文,从而继续执行用户操作,这个过程不需要对数据进行同步和匹配,用起来与同步操作无异。 nginx工作模式是管理进程(master process) + 工作进程(worker processes)的模式,我们可以称之为看门狗模式 下面是nginx的看门狗工作模式 对于ngx_lua,我们可以理解为在以上这种基础模式的情况下,加入了lua解释器和lua虚拟机,相当于每个工作进程都有自己独立的lua解释器和虚拟机实例,而且单独工作进程所处理的请求都会共享这个实例。ngx_lua处理请求的方式是“一个请求对应一个协程”,当请求被建立的时候,对应的协程也会被创建出来,当请求完成的时候,这个对应的协程也会被销毁。同时每个协程都有自己的独立全局变量空间,所以请求跟请求之间的协程不会有相互影响,而且代码也会被放入到sandbox沙箱里面,请求创建的时候协程全局变量以及代码sandbox所对应的内存空间都会被创建,请求结束的时候这些内存空间会相应被销毁。 这时候有人可能会担心请求量大,协程数量也随之增大,起对应的内存空间也会增大,那么会不会影响整体系统的性能呢? duck不必担心这个问题,协程是轻量级线程,而且ngx_lua本身给每个协程分配的内存空间在2kb左右,对于系统性能消耗大家不必太担心的。 下面是ngx_lua与nginx本身配合的整体生命周期 整体流程: a. worker process初始化ngnix各个模块 b. event模块检查到有用户请求,然后创建连接 c. 根据nginx配置和请求细节调用对应的handler(假设有ngx_lua的配置),然后调用对应的ngx_lua d. ngx_lua模块调用lua VM,运行对应的代码 e. lua VM 调用lua代码 f. VM 返回结果给ngx_lua g. ngx_lua给http模块返回响应数据 h. http接收到数据后向event模块发出响应 i. event模块向工作进程交出控制权 ngx_lua整体机制: a. 每个工作进程创建对应的lua虚拟机 b. ngnix i/o操作封装为lua使用的api载入虚拟机给我们写的lua代码使用 c. 每个请求都会拉起一个对应的协程进行处理,且协程与协程之间数据是不会相互污染的 d. Lua代码调用i/o等异步接口时,当前协程会被挂起,上下文数据自动保存,不会阻塞工作进程 e. i/O 等异步操作完成时还原线程上下文,继续代码执行 3.nginx的http请求阶段分析 首先看一个结构体: typedefenum{ NGX_HTTP_POST_READ_PHASE = 0, // 接收到完整的HTTP头部后处理的阶段 NGX_HTTP_SERVER_REWRITE_PHASE, // URI与location匹配前,修改URI的阶段,用于重定向 NGX_HTTP_FIND_CONFIG_PHASE, // 根据URI寻找匹配的location块配置项 NGX_HTTP_REWRITE_PHASE, // 上一阶段找到location块后再修改URI NGX_HTTP_POST_REWRITE_PHASE, // 防止重写URL后导致的死循环 NGX_HTTP_PREACCESS_PHASE, // 下一阶段之前的准备 NGX_HTTP_ACCESS_PHASE,…

    December 29, 2020 0 0
  • openresty+lua高并发:(1) win环境下idea配置lua开发环境

    1 准备软件 lua for windows v5.1.4 idea2019版本的 idea配置lua的开发环境 一. 下载lua for win 下载地址,然后一路安装 https://www.anxz.com/down/19788.html 二. idea2019版本自行安装 三. 配置lua的开发环境 1. 安装emmylua 2. 配置sdk 【File】->【Project Structure】 配置lua.exe的运行sdk 3.写一个测试代码 4.运行时候报错 这个时候我们需要调整run configuration 必须要知道的就是我们的执行文件路径必须要清楚,working dir 工作文件路径也要清楚设置才可以成功执行 以下是执行结果:

    December 8, 2020 0 0
  • 配置Springboorsecurity时候Eureka客户端注册Cannot execute request on any known server解决

    添加了eureka注册中心的用户安全验证后,我开启了eureka client客户端吼发现链接不上,并且报错栈里面出现了“Cannot execute request on any known server” 这个错误,经过多方查证我发现配置都没问题,主要是spring security在新的spring2.0版本以上的时候需要加一个配置类 其实大概意思是,springboot2.0以后每个跟类有关的请求都要有一个有效的跨站点csrf令牌,而这个时候eureka client并没有这个东西,所以呢我们就必须在配置上对/eureka/ 这个路径的请求进行绕开操作* 代码如下所示(一种是下面的写法还有第二种是内部类) package com.zrk.config; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; /** * @Description: * @Author: zrk * @Date: 2019/9/12 */ @EnableWebSecurity class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().ignoringAntMatchers("/eureka/**"); super.configure(http); } } 这个代码的位置如下图所示 第二种方法 直接上代码 public class DemoEurekaServerApplication { public static void main(String[] args) { SpringApplication.run(DemoEurekaServerApplication.class, args); } @EnableWebSecurity static class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().ignoringAntMatchers("/eureka/**"); super.configure(http); } } }

    November 4, 2020 0 0
  • 2. Eureka Client客户端创建并实现注册中心注册

    上次我们实现的是Eureka服务发现服务端的建立以及上线,这次我们着重介绍客户端的建立以及如何配置服务发现向服务节点注册我们的客户端 搭建过程 创建Eureka Client为基础的Spring Boot项目 代码与配置 启动类注解+yml配置 1. 框架基础搭建 这里的搭建方式基本与服务端的创建方式是一样的都是用spring initializr进行初始化创建,不同的是我们要做的是发现的客户端 创建项目Eureka Client的Spring Boot项目框架 注意选择的是Discovery Client 后续操作基本一致 1. 代码与配置 除了注解不同配置有一些差异外,其他的基本都是一样的 启动类注解+yml配置 @SpringBootApplication @EnableEurekaClient public class WkkUserProviderApplication { public static void main(String[] args) { SpringApplication.run(WkkUserProviderApplication.class, args); } } 以上是启动类的注解配置,注意这里面我们用的是EurekaClient与Server是不同滴 yml文件的配置相比较多出了一个application名字的配置 eureka: client: service-url: defaultZone: http://localhost:7776/eureka/ # healthcheck: # enabled: true # instance: # lease-expiration-duration-in-seconds: 30 # lease-renewal-interval-in-seconds: 10 registry-fetch-interval-seconds: 5 server: port: 9001 spring: application: name: client 最后启动(首先保证注册中心处于启动状态) 一个bug 当我们用spring initialzr去初始化spring boot的时候,会发现 https://start.spring.io 会连接不上或者速度很慢,这个时候我们可以用自定义的源地址,例如,https://start.aliyun.io

    October 30, 2020 0 0
  • php正则函数错误 preg_match(): Compilation failed: invalid range in character class at offset

    preg_match(): Compilation failed: invalid range in character class at offset 这个错误的发生位置在wordpress编辑器代码高亮工具 Crayon Syntax Highlighter 安装后,当我们添加新文章进入编辑器的时候出现的 具体代码位置在plugins/crayon_syntax_highlighter/crayon_langs.class.php的第340行 function __construct($id, $name = NULL) { parent::__construct($id, $name); $this->modes = CrayonParser::modes(); } // Override function clean_id($id) { $id = CrayonUtil::space_to_hyphen( strtolower(trim($id)) ); return preg_replace(‘/[^\w-+#]/msi’, ”, $id); } 我们把340行的 return preg_replace(‘/[^\w-+#]/msi’, ”, $id); 修改为 return preg_replace(‘/[^\w\-+#]/msi’, ”, $id); 下面引用自stackflow上面的描述大概意思是php的正则library pcre从php7.3开始更新未pcre2,然后语法会越来越严格,大概就是这个意思 The problem is really old, but there are some new developments related to PHP 7.3 and newer versions that need to be covered. PHP PCRE engine migrates to PCRE2, and the PCRElibrary version used in PHP…

    October 21, 2020 0 0
  • Load more posts

Contact Us

在线咨询:点击这里给我发消息

邮件:814489173@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code