boilerplate

ABP之多租户

空扰寡人 提交于 2021-02-12 22:46:24
“软件多租户”指的是一种软件架构,一个软件实例在一个服务器上运行,但为多个租户服务。租户们对软件实例有通用的访问入口,但是每个租户都有特定的权限。 在多租户体系架构中,用程序旨在为每个租户提供一个专用的实例共享,包括其数据*、配置、用户管理、租户个人功能和非功能属性。 多租户与多实例体系结构形成对比,在多实例体系结构中,独立的软件实例代表不同的租户操作”(维基百科)。 简而言之,多租户是一种用于创建 SaaS (软件即服务)应用程序的技术。 数据库和部署架构 有几种不同的多租户数据库和部署方法: 多个部署-多个数据库(Multiple Deployment - Multiple Database) 这实际上不是多租户,但是如果我们为每个客户(租户)运行一个应用程序实例,并使用一个独立的数据库,我们可以在一个服务器上为多个租户服务。我们只需要确保应用程序的多个实例在同一个服务器环境中不会相互冲突。 对于已存在的但没有被设计为多租户的应用程序也是可能的。创建这样的应用程序可能更容易,因为不需要考虑多租户,但是会有安装,使用以及维护等各种问题。 单一部署-多个数据库(Single Deployment - Multiple Database) 在这种方法中,我们在服务器上运行应用程序的单个实例。我们有一个主(主机)数据库来存储租户元数据(比如租户名称和子域),每个租户有一个单独的数据库

ABP 多租户 对应多数据库 租户启动报错

偶尔善良 提交于 2021-02-04 19:02:20
什么是多租户? “软件多租户是指一个软件体系结构,其中一个软件实例在一个服务器上运行,并为多个租户提供服务*租户是一组共享具有软件实例特定权限的公共访问权限的用户。 架构中,软件应用程序旨在为每个租户提供一个包含其数据*,配置,用户管理,租户个人功能和非功能属性的实例共享*多租户与多实例架构形成鲜明对比,其中独立的软件实例运行 代表不同的租户“(维基百科),简而言之,多租户是一种用于创建SaaS(软件即服务)应用程序的技术。 数据库和部署体系结构 有一些不同的多租户数据库和部署方法: 1、多个部署 - 多个数据库 实际上这不是多租户,但是如果我们为每个客户(租户)运行一个具有独立数据库的应用程序实例,则可以在一台服务器上为多个租户提供服务。我们只需确保应用程序的多个实例在相同的服务器环境中不会相互冲突。 对于不是被设计为多租户的现有应用来说,这也是可能的。由于应用程序不知道多租户,创建这样的应用程序更容易。然而,这种方法存在设置,使用和维护问题。 2、单一部署 - 多个数据库 在这种方法中,我们在服务器上运行应用程序的单个实例。我们有一个主(主机)数据库来存储租户元数据(如租户名和子域)和每个租户的单独数据库。一旦我们确定了当前的租户(例如,从子域或从用户登录表单),那么我们可以切换到该租户的数据库来执行操作。在这种方法中,应用程序应该在一定程度上被设计为多租户

sCrypt IDE 0.5.5 支持 UI 调用有状态合约

人盡茶涼 提交于 2021-01-28 09:17:02
继上次我们推出 sCrypt Deploy 功能后,这次我们新增了调用有状态合约的功能。 本文以 boilerplate 项目中的 advancedCounter 合约为例,介绍如何使用这个功能部署和调用合约。 部署合约 AdvancedCounter 合约是一个有状态的计数器合约,它会在每次成功调用 increment 方法时,将内部状态值 counter 增加 1。这里我们将其初始状态设置为 00 (即从0开始计数),并且合约锁定的 bsv 余额使用默认设置 10000 聪。 使用这个方法 部署合约成功之后,会看到左下角的 DEPLOYED CONTRACTS 增加了一个 AdvancedCounter 合约实例。展开该实例的 transactions 子项,可以看到对应的部署交易。 注意 :如果点击了 Deploy 按钮后,在运行输出中看到这个错误: Error: Contract description version deprecated, Please update your sCrypt extension to the latest version and recompile ,请尝试执行以下步骤:1.打开合约的 sCrypt 源码,右键运行 Compile to Bitcoin Script 进行再次编译;2.点击 COMPILED CONTRACTS 视图里的

运行ABP(asp.net core 3.X+Vue)提示'OFFSET' 附近有语法错误。 在 FETCH 语句中选项 NEXT 的用法无效。

a 夏天 提交于 2021-01-18 09:09:33
创建 ASP.NET Boilerplate ,还原数据库和启动客户端 这里就略过,具体参考 ABP框架(asp.net core 2.X+Vue)模板项目学习之路(一) ASP.NET Boilerplate VueJS Template 选择 Target Version:v3.x Target Framework: .NET Core (Cross Platform) Single Page Web Application:vue.js Choose your project's name: MyCompany.MyProject 用户名:admin 密码:123qwe 点击登录后成功进入系统,点击租户页面,提示错误: 对不起,在处理您的请求期间,产生了一个服务器内部错误! 请求信息: 查看日志信息,路径5.0.0\aspnet-core\src\MyCompany.MyProject.Web.Host\App_Data\Logs: ERROR 2019 - 12 - 13 12 : 47 : 27 , 121 [ 21 ] Mvc.ExceptionHandling.AbpExceptionFilter - ' OFFSET ' 附近有语法错误。 在 FETCH 语句中选项 NEXT 的用法无效。 Microsoft.Data.SqlClient.SqlException

egg源码浅析一npm init egg --type=simple

≯℡__Kan透↙ 提交于 2020-11-22 14:42:14
要egg文档最开始的时候,有这样的几条命令: 我们推荐直接使用脚手架,只需几条简单指令,即可快速生成项目: $ mkdir egg -example && cd egg-example $ npm init egg --type=simple $ npm i 其中的 npm init egg --type=simple 命令为什么能够生成egg项目的基本构架呢? 一、npm init命令 根据 https://www.npmjs.cn/cli/init/ 官网的解释: npm init <initializer> can be used to set up a new or existing npm package. initializer in this case is an npm package named create-<initializer>, which will be installed by npx , and then have its main bin executed.  按照上面的解释,npm init egg 相当于 npx create-egg 并且执行create-egg的bin. 二、npx命令   npx相当于npm,但npx会把node_modules/.bin/目录加入环境变量.   这里讲怎么用: http://www.ruanyifeng

为什么要使用getter和setter / accessor?

纵饮孤独 提交于 2020-08-16 02:42:31
问题: What's the advantage of using getters and setters - that only get and set - instead of simply using public fields for those variables? 使用仅获取和设置的getter和setter而不是仅对这些变量使用公共字段的优点是什么? If getters and setters are ever doing more than just the simple get/set, I can figure this one out very quickly, but I'm not 100% clear on how: 如果getter和setter所做的不只是简单的get / set,我可以很快地弄清楚这一点,但是我不清楚如何做到这一点: public String foo; is any worse than: 比以下任何方面都更糟糕: private String foo; public void setFoo(String foo) { this.foo = foo; } public String getFoo() { return foo; } Whereas the former takes a lot less boilerplate

为什么不从列表继承 <T> ?

让人想犯罪 __ 提交于 2020-08-14 12:32:17
问题: When planning out my programs, I often start with a chain of thought like so: 在计划程序时,我通常会像这样思考: A football team is just a list of football players. 足球队只是足球运动员的名单。 Therefore, I should represent it with: 因此,我应该用: var football_team = new List<FootballPlayer>(); The ordering of this list represent the order in which the players are listed in the roster. 该列表的顺序代表了在名单中列出球员的顺序。 But I realize later that teams also have other properties, besides the mere list of players, that must be recorded. 但是后来我意识到,除了球员名单外,球队还有其他属性,必须加以记录。 For example, the running total of scores this season, the current budget

创建第一个AMP页面【英译AMP】

假装没事ソ 提交于 2020-08-10 16:27:38
想创建您的第一个AMP页面又不知道如何开始?在本教程中,您将学习如何创建一个基本的AMP HTML页面,如何对其进行设置并验证它是否与AMP兼容,以及如何为发布和分发做好准备。 Create your first AMP page Not sure how to get started? In this tutorial, you’ll learn how to create a basic AMP HTML page, how to stage it and validate that it’s AMP compliant, and finally how to get it ready for publication and distribution. 下面的代码是一个不错的amp样板,可以做为学习的开始。复制并将其保存到扩展名为.html的文件中。 <!doctype html> <html amp lang="en"> <head> <meta charset="utf-8"> <script async src="https://cdn.ampproject.org/v0.js"></script> <title>Hello, AMPs</title> <link rel="canonical" href="https://amp.dev/documentation

黑客赏金第一期 | aelf跨链转账标准协议准备就绪,88888ELF赏金等你挑战!

夙愿已清 提交于 2020-08-04 16:40:57
2020年5月14日,aelf推出CCTP《跨链转账标准协议》,为证明锁仓合约及CCTP的足够安全,以及让用户们更加全面地了解CCTP的落地实践,aelf 决定举办第一期黑客悬赏活动。 此次黑客悬赏活动将作为赏金任务基于aelf DAO进行发布,确保活动流程执行与赏金发放等事宜的员全程公开透明。本次活动将分为两期举行,本期的悬赏金额为88888 ELF,期待全球黑客前来挑战! 为了保障用户在参与锁仓映射等链上事务时,其资产安全能得到保障,ELF Token锁仓映射使用了Merkle Proof流程,数据完全在链上公开并无法伪造。首先基于ETH网络部署锁仓合约和Merkle tree合约,在限定时间内锁定测试Token ELF,统一批次生成Merkle tree root后,用户即可获得Merkle Proof所需数据。然后将Merkle tree root数据(Merkle tree 的根哈希值)记录在aelf网络后,即可开启映射功能。aelf网络对用户映射账户数据进行验证后,即自动将对应的测试Token ELF转账至相应账户地址,完成映射。锁仓期满后,用户可在ETH锁仓合约中领取回token,且只能由原用户领回,以此保障用户资产的安全。参与悬赏任务的黑客可基于此ELF Token锁仓映射实现逻辑寻找底层技术上的突破点。 活动时间: 2020年5月29日 20:00-6月5日12