如何以编程方式打开芹菜日志?
从终端,这工作正常:
celery worker -l DEBUG
Run Code Online (Sandbox Code Playgroud)
当我打电话时get_task_logger(__name__).debug('hello'),我可以看到终端中出现的消息.(stdout和stderr正在显示)我甚import logging至可以打电话来logger.info('hi')看看.(两个都工作)
但是,在开发任务时,我更喜欢使用测试模块并直接调用任务函数而不是激活整个工作者.但我看不到日志消息.我知道Celery正在将所有内容重定向到其内部设备,但我也希望在stdout上看到日志消息.
如何告诉Celery将日志消息的副本发送回stdout?
我已经阅读了一些关于日志记录的在线文章,但似乎已经弃用了许多来自芹菜的与日志相关的配置变量,我不清楚文档中今天支持的路径是什么.
这是一个示例模块,它创建一个芹菜对象并尝试记录输出.终端没有显示任何内容.
示例mymodule.py
from celery import Celery
import logging
from celery.utils.log import get_task_logger
app = Celery('test')
app.config_from_object('myfile', True)
get_task_logger(__name__).warn('hello world')
logging.getLogger(__name__).warn('hello world 2')
Run Code Online (Sandbox Code Playgroud)
编辑 我知道我可以添加一个处理程序,通过添加一个处理程序将一些输出重定向回终端
log = get_task_logger(__name__)
h = logging.StreamHandler(sys.stdout)
log.addHandler(h)
Run Code Online (Sandbox Code Playgroud)
但这样做有"芹菜方式"吗?也许一个让我也有Celery格式的文本行.
[2014-03-02 15:51:32,949: WARNING] hello world
Run Code Online (Sandbox Code Playgroud) UPDATE
这已经解决了,所以我已经为未来的读者更新了这篇文章
我在这方面遇到了困难.这里有很多 的 SO文章有关这些设置,但我被卡住了.
我的目标是执行两个步骤:
1)读取将与msi物理一起提供的文件.换句话说,将有三个文件setup.exe,test.msi,specialFile.txt
2)在安装过程中,我想在安装路径中创建一个新文件.C:\ Program Files\MyCompany\MyApplication \newFile.txt
步骤2中的文件是通过读取步骤1中的specialFile.txt中的内容创建的.
我的问题是导航WiX设置的模糊组合,以使我能够读取会话变量并具有足够高的权限来写出文件.这并不容易.
这是解决方案:
<Binary Id="MyCustomAction.CA.dll" SourceFile="path\to\MyCustomAction.CA.dll" />
<CustomAction Id="MyActionsName"
Return="check"
Execute="deferred"
BinaryKey="MyCustomAction.CA.dll"
DllEntry="MyCustomAction"
Impersonate="no"/>
<CustomAction Id="CustomAction1"
Property="MyActionsName"
Value="INSTALLFOLDER=[Get_This_From_Your_Directory_Tag];SOURCEDIR=[SourceDir]"/>
<InstallExecuteSequence>
<Custom Action="CustomAction1" Before="MyActionsName" />
<Custom Action="MyActionsName" Before="InstallFinalize">NOT Installed AND NOT PATCH</Custom>
</InstallExecuteSequence>
Run Code Online (Sandbox Code Playgroud)
impersonate="no" 为了有足够的privs来写文件"deferred"为了拥有足够的权限来写入文件Before="InstallFinalize",这是在安装文件之后. 然后在C#代码中,执行以下操作:
string sourceDir = session.CustomActionData["SOURCEDIR"]
string installFolder = session.CustomActionData["INSTALLFOLDER"]
Run Code Online (Sandbox Code Playgroud)
其他有用的参考文献:
本文介绍如何在不使用session ["SourceDir"]的情况下读取SourceDir,因为自定义操作是延迟的.
我有一个简单的QT项目.我正在Linux上开发.但它最终要部署到Linux,Mac和Windows.
我正在尝试打包它以便分发.我遇到了查找依赖项并将其打包并以惯用方式执行此操作的问题(IOW:没有硬编码的DLL路径或包含我的源代码库中的DLL)
对于Windows端口,我正在使用MinGW并进行如下编译:
mingw64-cmake -G "Unix Makefiles" .. -DCMAKE_INSTALL_PREFIX=../install -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=/usr/share/mingw/toolchain-mingw64.cmake
make && ctest && make install && cpack -G "TGZ" && cpack -G "NSIS64"
Run Code Online (Sandbox Code Playgroud)
我已将其设置为生成tar.gz文件和NSIS安装程序.目前没有特别的理由让NSIS而不是Wix.这只是为了解决问题.
它编译Windows可执行文件,但它不包括运行该程序所需的DLL.就是这些:
Libgcc_s_seh-1.dll
Qt5Core.dll
Qt5Gui.dll
Run Code Online (Sandbox Code Playgroud)
在我的计算机上快速查找显示这些DLL存在于此处:
/usr/x86_64-w64-mingw32/sys-root/mingw/bin/Qt5Widgets.dll
/usr/x86_64-w64-mingw32/sys-root/mingw/bin/libgcc_s_seh-1.dll
...
Run Code Online (Sandbox Code Playgroud)
有没有办法自动让CPack挖掘DLL并将它们包含在安装程序中?
这是我的CMakeLists.txt档案:
cmake_minimum_required(VERSION 2.8.11)
project(myapp)
enable_testing()
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
find_package(Qt5Core REQUIRED)
find_package(Qt5Gui REQUIRED)
find_package(Qt5Widgets REQUIRED)
add_executable(myapp WIN32 main.cpp mainwindow.cpp resources.qrc)
target_link_libraries(myapp Qt5::Widgets)
target_link_libraries(myapp Qt5::Core)
target_link_libraries(myapp Qt5::Gui)
INSTALL(TARGETS myapp
BUNDLE DESTINATION .
RUNTIME DESTINATION …Run Code Online (Sandbox Code Playgroud) chmod -R o+w media var
chmod o+w app/etc
Run Code Online (Sandbox Code Playgroud)
这让我们超越了安装程序.
接下来,我想从Magento Connect下载主题.不幸的是,这是一个似乎与权限相关的错误.
Settings has not been loaded. Used default settings
Config file does not exists please save Settings
Warning: Your Magento folder does not have sufficient write permissions.
Run Code Online (Sandbox Code Playgroud)
通过它需要什么权限?
我也看到有关连接字符串的错误.
Connection string is empty
Run Code Online (Sandbox Code Playgroud)
虽然我们在这里,但为了使Magento功能齐全(和安全),必须设置的总权限是多少?
我意识到Magento!= Wordpress.它与Wordpress一样安装友好.只要多一点点!
有没有办法大幅减少Boost所需的头文件数量?
理想情况下,我要求Boost人们找到一种方法来缩小他们的产品.但与此同时,有没有办法包含Boost,但没有几千个头文件可以处理?
是否有一种C++机制将数千个头文件"捆绑"到一个"包"中,并将该单个文件检入源代码控制中?
我想这里的问题是源代码控制做一个差异,svn status并且svn checkout所有这些文件都要处理这么慢.
这对我来说没有意义.如何使用setup.py安装Cython,然后使用setup.py编译库代理?
import sys, imp, os, glob
from setuptools import setup
from Cython.Build import cythonize # this isn't installed yet
setup(
name='mylib',
version='1.0',
package_dir={'mylib': 'mylib', 'mylib.tests': 'tests'},
packages=['mylib', 'mylib.tests'],
ext_modules = cythonize("mylib_proxy.pyx"), #how can we call cythonize here?
install_requires=['cython'],
test_suite='tests',
)
Run Code Online (Sandbox Code Playgroud)
后来:python setup.py构建
Traceback (most recent call last):
File "setup.py", line 3, in <module>
from Cython.Build import cythonize
ImportError: No module named Cython.Build
Run Code Online (Sandbox Code Playgroud)
这是因为尚未安装cython.
奇怪的是,很多项目都是用这种方式编写的.一个快速的github搜索显示:https://github.com/search? utf8 =% E2%9C%93&q = install_requires + cython&type = Code
我使用Python为我的数据库创建了一组模型.现在我想用一些数据快速加载它们 - 手动.如果这是一个.NET应用程序,我会使用Visual Studio附带的一个漂亮的控件来快速连接到数据库并将网格绑定到它.然后去城镇添加数据.
使用Google App Engine在Python中执行此操作的匹配方式是什么?
在ASP.NET MVC中,他们有这个新的"脚手架"东西(实体框架的一部分),它将为您生成CRUD页面.在GAE中给出了一堆模型对象有什么类似的吗?
PS使用方便的,花花公子的命令行选项--use_sqlite和--datastore_path,一旦我这样做,我就可以在我的开发环境中快速备份我的数据库.
我正在支持一个大型的旧应用程序.代码使用NLog以及Debug.WriteLine和Trace.WriteLine.我正在尝试将Debug.WriteLine和Trace.WriteLine重定向到Nlog文件.所以一切都在一个地方.目前,有些位于"输出"窗口中,有些位于日志文件中.
那篇文章将System.Net和System.Net.Sockets分流到日志文件中.我尝试了它,它的工作原理.我看到System.Net和System.Net.Sockets消息被记录到文件中. 这篇SO文章描述了相同的 - 它的工作原理.
什么不起作用是将我自己的消息从我自己的命名空间和类记录到日志文件中.
System.Diagnostics.Debug.WriteLine("This won't end up in the log file");
System.Diagnostics.Trace.WriteLine("This won't end up in the log file");
Run Code Online (Sandbox Code Playgroud)
我已经尝试将源名称从我的应用程序更改为名称空间.没工作.我无法让自己的WriteLines登录到该文件.它们仍出现在Visual Studio输出窗口中.
例如:
<system.diagnostics>
<sources>
<source name="MyAppNamespace" switchValue="All">
<listeners>
<add name="nlog" />
</listeners>
</source>
</sources>
<sharedListeners>
<add name="nlog" type="NLog.NLogTraceListener, NLog" />
</sharedListeners>
</system.diagnostics>
Run Code Online (Sandbox Code Playgroud)
显式NLog调用正好记录到日志文件中:
NLog.LogManager.GetCurrentClassLogger().Trace("This Works");
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个既包含ZLIB又包含LIBPNG(以及其他库)的项目.LibPNG的CMakeLists.txt文件中包含它: find_package(ZLIB REQUIRED)它随附的股票代码,我不想改变它.
我正在构建Windows(Visual Studio).这是一个跨平台的应用程序(Windows,Mac,Linux和移动设备)我不能依赖任何库的/ usr/lib版本.所以我一起用我的项目构建它们.
除非我这样做,否则我无法建立LibPNG.在上层CMakeLists.txt文件中,我把它放在那里:
ADD_SUBDIRECTORY(contrib/${CUSTOM_ZLIB_LOCATION})
SET(ZLIB_FOUND ON CACHE BOOL "Yes")
SET(ZLIB_INCLUDE_DIR ${CMAKE_BINARY_DIR}/contrib/${CUSTOM_ZLIB_LOCATION} {CMAKE_SOURCE_DIR}/contrib/${CUSTOM_ZLIB_LOCATION})
SET(ZLIB_LIBRARY zlib CACHE STRING "zlib library name")
Run Code Online (Sandbox Code Playgroud)
这满足find_package(ZLIB REQUIRED) 但我认为这是一个黑客.是否有一些直接的方法来构建zlib的本地副本而没有所有3条额外的行?
我有两个不同的网络应用程序.它们被设置在根目录的不同服务器上.但现在它们将被放置在同一服务器上的子目录中.下面的脚本将子目录和URI一起发送到脚本.这是个问题.
旧网址:
新网址:
商店网站看到/store/items/1它想要看到的时间/items/1.后台网站也是如此.
我的尝试:
location /store {
try_files @store_site;
}
location /backoffice {
try_files @backoffice_site;
}
location @store_site {
include uwsgi_params;
uwsgi_pass unix:/var/run/uwsgi/store_site.sock;
proxy_set_header Host $host;
}
location @backoffice_site {
include uwsgi_params;
uwsgi_pass unix:/var/run/uwsgi/backoffice_site.sock;
proxy_set_header Host $host;
}
Run Code Online (Sandbox Code Playgroud)
同样,商店网站正在获取带有/store前缀和后台的URL /backoffice.这些网站被编码为不期望这些前缀.我需要在发送到实际站点之前删除/store和/backoffice前缀.
这是重写规则吗?
我基于这个SO页面尝试了这个,但它没有用.我不能理解语法.
location /store {
rewrite ^/store/(.*) /$1;
try_files $uri @store_site;
}
Run Code Online (Sandbox Code Playgroud)
更新
显然,这是有效的(补充break;)这是一个完整的解决方案吗? …