小编Jac*_*ian的帖子

无法在Lua代码中使用环境变量

我有一些Lua代码,我在openresty nginx.conf文件中使用它.这个Lua代码包含这样的行:

...
local secret = os.getenv("PATH")
assert(secret ~= nil, "Environment variable PATH not set")
...
Run Code Online (Sandbox Code Playgroud)

出于测试原因,我试图检查是否设置了PATH变量,并且由于某种原因,断言语句没有通过.我在控制台中看到:

环境变量PATH未设置

但是,当我运行这个

$ echo $PATH
Run Code Online (Sandbox Code Playgroud)

我知道,这个变量确实有一些价值.那么,这有什么问题,我该如何解决?

lua nginx openresty

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

用于实现事务或链接机制的设计模式

我在C#和Java中实现了一个简单的Factory类.此类构建具有同一个接口的具体工作类的实例.特别是所有这些类都有如下方法:

create
select
alter
etc.
Run Code Online (Sandbox Code Playgroud)

现在我想要一个机制(建立在一些经典/非经典模式之上),这将允许我创建这些方法的"链"或将它们封装在一种事务中.在伪代码中,我希望看到类似的东西:

Transaction tnx = create(...args...).alter(...args_2...);
//tnx.Execute();
Run Code Online (Sandbox Code Playgroud)

或类似的东西:

Transaction tnx;
tnx.Start();
tnx.Add(method_name, ... variable list of arguments ...);
tnx.Add(another_method_name, ... variable list of arguments ...);
tnx.Execute();
Run Code Online (Sandbox Code Playgroud)

我不擅长设计模式,我不确定使用什么模式.我希望有人可以分享和删除几行代码(在C#或Java中),这些代码将演示如何实现它.谢谢!

c# java design-patterns

10
推荐指数
2
解决办法
7075
查看次数

在MySQL中选择DISTINCT和ORDER BY

看起来在MySQL的5.7版本中,他们添加了一个令人讨厌的东西,对于那些处理SQL Server的人来说,这是一个真正令人头痛的问题.

问题是:当你尝试SELECT DISTINCT一组列的行并想要ORDER BY另一组列时,MySQL会抛出一个错误.以前,在5.6版本中甚至在5.7版本的某些版本中你可以这样做,但现在禁止它(至少在默认情况下).

我希望存在一些配置,我们可以设置一些变量来使其工作.但不幸的是,我不知道这个讨厌的变量.我希望有人知道.

编辑

这是我的案例中的一些典型查询,这些查询在字面上工作多年(直到MySQL 5.7的最后一次构建):

SELECT DISTINCT a.attr_one, a.attr_two, a.attr_three, b.attr_four FROM table_one a
LEFT JOIN table_two b ON b.some_idx = a.idx
ORDER BY b.id_order
Run Code Online (Sandbox Code Playgroud)

而且,实际上,如果我现在包含b.id_order在该SELECT部分中(正如MySQL建议的那样),那么我将得到的将是垃圾.

mysql

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

SELECT 返回空结果集

当我尝试从表中插入和选择数据时,我得到一个空的结果集。我这样做:

reestr-# INSERT INTO datatype(code) VALUES ('blabla')
reestr-# SELECT * FROM datatype
reestr-#
Run Code Online (Sandbox Code Playgroud)

因此,我在控制台中没有收到错误或警告,但仍然无法插入或选择任何数据。顺便说一句,我什至试图插入一个无效的字段cod而不是code没有错误 - 这真的很奇怪。

postgresql

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

CQRS 命令和查询。从 DDD 角度来看,它们属于应用程序级别还是域级别?

在阅读不同的 DDD 文献时,我偶然发现了一个理论问题。问题是我是否应该将命令和查询放置在应用程序级别或域级别。

因此,像 Scott Wlaschin 这样的一些作者(在他的《Domain Modeling Made Functioning》一书中)说

如果命令成功,它将启动一个工作流程,进而创建相应的领域事​​件

因此,例如“下订单”命令和域事件“下订单”之间存在对应关系。这让我相信,我应该将命令和事件放在一个级别上并像这样组织它:

\Model
    \Message
         \Command
             PlaceOrder.lang
         \Event
             OrderPlaced.lang
Run Code Online (Sandbox Code Playgroud)

因此,我将所有命令放在域级别,而应用程序服务调用这些命令并将它们包装在事务中。

然而,Scott Millett 的书(领域驱动设计的模式、原则和实践)中表达了另一种观点。引用说:

命令是一项业务任务,是系统的一个用例,它位于应用程序层中。您应该使用业务语言编写命令。

由于这种矛盾,我不太确定处理命令(以及查询)的最规范的方式是什么。在现实世界中,它们存在于域级别还是应用程序级别?

domain-driven-design cqrs

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

在mongodb中实现分页

我知道使用它skip来实现分页是一种不好的做法,因为当数据变大skip时会开始消耗大量内存.解决这个问题的一种方法是按_id字段使用自然顺序:

//Page 1
db.users.find().limit(pageSize);
//Find the id of the last document in this page
last_id = ...

//Page 2
users = db.users.find({'_id'> last_id}). limit(10);
Run Code Online (Sandbox Code Playgroud)

问题是 - 我是mongo的新手,不知道最好的方法是什么 last_id

javascript pagination mongodb mongodb-query

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

如何计算OpenXML中每个工作表的行数

我从Interop库切换到OpenXML,因为我需要读取大Excel文件.在此之前,我可以使用:

worksheet.UsedRange.Rows.Count
Run Code Online (Sandbox Code Playgroud)

获取工作表上包含数据的行数.我使用这些信息来制作进度条.在OpenXML中,我不知道如何获得有关工作表的相同信息.我现在拥有的是这段代码:

 using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(path, false))
{
    WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart;
    WorksheetPart worksheetPart = workbookPart.WorksheetParts.First();
    SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First();
    int row_count = 0, col_count;
    // here I would like to get the info about the number of rows
    foreach (Row r in sheetData.Elements<Row>())
    {
        col_count = 0;
        if (row_count > 10)
        {
            foreach (Cell c in r.Elements<Cell>())
            {
                // do some stuff  
                // update progressbar  
            }
        }
        row_count++;
    }
}
Run Code Online (Sandbox Code Playgroud)

c# openxml

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

如何在Linux上从C++连接并执行对SQL Server的简单查询

我想,我有设置连接和查询SQL Server数据库的所有先决条件,因为我可以从我的Python代码中做到这一点.我这样做是这样的:

#1. Set connection using pyodbc library

db = pyodbc('DRIVER=FreeTDS;SERVER='+host+';PORT='+port+';DATABASE='+ \
            db_name+ ';UID='+ user+ ';PWD='+ pwd+ ';TDS_Version=7.0;ClientCharset=UTF8;') 

#2. List all table names in a particular database

cursor = db.cursor()
cursor.execute('SELECT TABLE_NAME FROM ' + db_name + '.INFORMATION_SCHEMA.Tables WHERE ' + \
'TABLE_TYPE=\'BASE TABLE\'')
res = cursor.fetchall()
Run Code Online (Sandbox Code Playgroud)

而且我已经完成了.现在我想实现相同的东西,使用C++.我见过像一些示例代码,但他们气色好糟糕五个if小号嵌套一个到另一个.但是我需要一些非常简单的东西,考虑到可能满足所有先决条件(如果可能不是,请指示还应该安装什么).

我想知道的最后一件事是如何编译这个程序(我通常使用这个g++).并且,请不要发布唯一的参考FreeTDSODBC- 我已经看过它们了.在这个阶段我想要的是一个在世界查询中执行最简单的最小化的例子(就像我上面所做的那样,使用Python).

c++ linux sql-server

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

将文件复制到现有目录会导致IOError [错误21]是一个目录

我收到此错误:

IOError [Error 21] is a directory
Run Code Online (Sandbox Code Playgroud)

当我尝试将文件复制到现有目录时.我是这样做的:

shutil.copyfile(src, dst)
Run Code Online (Sandbox Code Playgroud)

where src是文件,dst是现有目录.我做错了什么?

python

7
推荐指数
2
解决办法
8014
查看次数

无法从地图上删除所有图层

我有一个很大的地图应用程序,因此,为了代表我将只提供一部分代码。因此,这就是我尝试从地图上删除所有图层的方式:

map.getLayers().forEach(function (layer) {
    map.removeLayer(layer);
});

//map.getOverlays().clear(); <-- also tried this, but to no effect
Run Code Online (Sandbox Code Playgroud)

而且我有一些随机行为-有时删除了所有图层,有时没有删除。这是完全随机的,因此不能保证您可以重现此问题。因此,仅从概念上了解为什么会发生就足够了。

显然这是一个ol3错误,因为如果我循环并删除两次,它将开始工作:

map.getLayers().forEach(function (layer) {
    map.removeLayer(layer);
});
//for some crazy reason I need to do it twice.
map.getLayers().forEach(function (layer) {
    map.removeLayer(layer);
});
Run Code Online (Sandbox Code Playgroud)

可能不是错误,并且有一些秘密方法可以清除地图。但是我不知道。

javascript openlayers-3

7
推荐指数
3
解决办法
3895
查看次数