标签: fastcgi

django,fastcgi:如何管理一个长时间运行的进程?

我继承了一个django + fastcgi应用程序,需要对其进行修改以执行冗长的计算(最多半小时或更长时间).我想要做的是在后台运行计算并返回"你的工作已经开始" - 类型的响应.当进程正在运行时,对URL的进一步命中应返回"您的作业仍在运行",直到作业完成,此时应返回作业的结果.对url的任何后续命中都应该返回缓存的结果.

我是django的一个新手,并且在十年内没有做过任何重要的网络工作,所以我不知道是否有内置的方法来做我想要的.我已经尝试通过subprocess.Popen()启动该过程,并且它工作正常,除了它在进程表中留下一个已解除的条目.我需要一个干净的解决方案,一旦完成就可以删除临时文件和进程的任何痕迹.

我也尝试过fork()和线程,但还没有找到可行的解决方案.对于我来说似乎是一个非常常见的用例,是否有规范的解决方案?FWIW这只会在流量非常低的内部服务器上使用.

python django fastcgi

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

将一个va_list作为参数传递给另一个参数

我正在使用fastcgi库创建一个应用程序,他们的打印方法有点冗长.我正在尝试用自己的方法包装他们的fprintf函数:

我想转

FCGX_FPrintF(out,char*fmt,...);

write(char*strFormat,...);

我找到了va_list的魔力但找不到将va_list值传递到fprintf函数的简单方法.有没有办法做到这一点?我知道vsprintf和vprintf存在,所以它必须比我想象的更难.

如果所有其他方法都失败了,我只会重载一个写函数

c++ fastcgi variadic-functions

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

如何使用Perl FCGI杀死?

我对nginx和Perl FCGI模块有点问题.我在我的FCGI程序中有一个很长的操作,可能比我用来与FCGI通信的Unix套接字另一端的服务器(或服务器上的用户)一样.我需要程序中的FCGI accept()循环才能在FCGI请求关闭时中断.我尝试安装INT,TERM等信号处理程序,但它们什么都不做,因为nginx和我的程序之间的唯一通信发生在FCGI套接字AFAIK上.

我也尝试了这个但是我无法看到在Perl中使用FCGI模块通过FCGI套接字向nginx发送原始数据或从nginx发送原始数据.有没有办法可以在不修改FCGI模块的情况下进行"ping"功能?

基本问题是我的程序不知道nginx是否已终止FCGI请求.

例:

#!/usr/bin/perl -w
use strict;
use FCGI;

my $fcgi_socket = FCGI::OpenSocket( '/tmp/test.socket', 100000 );
my $request = FCGI::Request(\*STDIN, \*STDOUT, \*STDERR, \%ENV, $fcgi_socket);
REQUEST: while($request->Accept() >= 0) {
    #begin handling request
    my $result = '';
    while (1) { #or select(), etc
        if (somehow check whether the fcgi $request is still live) {
            next REQUEST;
        }
        #check for results, set $result if done
    }
    print $result;
}
Run Code Online (Sandbox Code Playgroud)

perl fastcgi ping nginx

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

php5与mod_fcgid导致500错误 - 可能是错误的权限

每次我请求.php文件时,我都会收到500错误代码.

我尝试了许多不同的文件权限并搜索了整个互联网(或者至少,感觉就像这样),但我找不到任何有用的东西.(这不是一个容易找到suexec错误或类似的东西.但我想,这是权限的东西......可能我只是不知道/某一点......)

/var/log/apache2/error.log(LogLevel info)

[Tue Sep 11 12:47:21 2012] [info] Init: Seeding PRNG with 648 bytes of entropy
[Tue Sep 11 12:47:21 2012] [info] Init: Generating temporary RSA private keys (512/1024 bits)
[Tue Sep 11 12:47:21 2012] [info] Init: Generating temporary DH parameters (512/1024 bits)
[Tue Sep 11 12:47:21 2012] [info] Init: Initializing (virtual) servers for SSL
[Tue Sep 11 12:47:21 2012] [info] mod_ssl/2.2.16 compiled against Server: Apache/2.2.16, Library: OpenSSL/0.9.8o
[Tue Sep 11 12:47:21 2012] [notice] suEXEC mechanism enabled (wrapper: …
Run Code Online (Sandbox Code Playgroud)

php permissions fastcgi mod-fcgid

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

PHP上传 - 500内部服务器错误

问题

上传大约8MB或更大的文件时,我收到500内部服务器错误.

  1. 所有PHP设置php.ini都是正确的
  2. maxAllowedContentLength 已在web.config中设置

服务器信息

正如人们可以从中看出的那样maxAllowedContentLength,我运行的是IIS 7.5,使用FastCGI和PHP 5.3.17

附加信息

我已经尝试了很多不同的东西来使这个工作,但根本找不到问题.

但是,我发现以下信息可能有助于找出问题的根源:

  1. 当使用我在服务器上的Media Wiki上传文件(较大的文件)时,我收到相同的错误,这表明它在我的代码中不是错误.
  2. 最重要的是 - 我设法在Plesk文件管理器中上传了一个18MB的文件,这显然意味着Plesk能够解决这个配置问题.我试图将所有Plesk控制面板设置复制到IIS中的此域,但这似乎不起作用.
  3. 在执行脚本之前返回错误,因为我尝试exit;在顶部写入以尝试获取空白屏幕,但这将被忽略并返回500错误.

我认为问题在于configure commandPHP配置的部分,因为当我更改.php文件的处理程序映射以使用Plesk php-cgi.exe而不是通常的时,我没有得到500内部错误.话虽如此,我不能把它放在这个PHP版本上,因为它是Plesk自己的exe,还有其他配置问题.

我认为它可能与configure命令有关的原因仅仅是因为它与其中一个有很大不同phpinfo().

如果您有任何想法或建议,请发布.我已经尝试了所有知识,似乎无法解决这个问题.如果只是Linux ...

提前致谢

更新1

忘记添加,PHP错误日志中没有返回错误.至于IIS错误,我不知道在哪里看

更新2

这是我在我的web.config文件中放置的内容:

<security>
    <requestFiltering>
        <requestLimits maxAllowedContentLength="2147483647" /> 
    </requestFiltering>
</security>
Run Code Online (Sandbox Code Playgroud)

更新3

在您的帮助下,我们设法获得IIS显示的错误.这是我收到的:

PHP警告:POST Content-Length为12221448字节超过了第0行的Unknown中的8388608字节限制

这跟那个有关系post_max_size吗?

更新4

PHP设置如下(来自phpinfo()):

post_max_size = 64M
memory_limit = 128M
max_file_uploads = 20
max_execution_time = 6000
upload_max_filesize …
Run Code Online (Sandbox Code Playgroud)

php iis upload fastcgi internal-server-error

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

Nginx + FastCGI + PHP(php-fpm)未记录捕获的错误/警告

FastCGI不希望正确记录PHP错误.嗯,这并不完全正确:它记录错误很好,有点摆弄; 它只是不会记录任何其他内容,例如警告.

臭名昭着的FastCGI - > Nginx日志错误不一定是个问题.来自php-fpm的错误和警告直接进入Nginx - 但前提是它们没有被捕获.也就是说,如果set_error_handler成功拦截错误,则不会附加任何日志条目.这意味着我可以看到解析错误,但这就是它.

php-fpm本身并不记录PHP错误(与nginx分开),没有任何破解.php-fpm的实例配置文件默认包含以下两行:

php_admin_value[error_log] = /mnt/log/php-fpm/default.log
php_admin_flag[log_errors] = on
Run Code Online (Sandbox Code Playgroud)

我明显改变了error_log路径.我必须添加以下行以使其实际记录任何内容:

php_admin_value[error_reporting] = E_ALL & ~E_DEPRECATED & ~E_STRICT
Run Code Online (Sandbox Code Playgroud)

版本说明:E_STRICT部分是不必要的,因为我使用的是PHP 5.3.27,但我计划在某些时候升级到5.4.有了这一行,它就会记录错误 - 而且只记录错误 - /mnt/log/php-fpm/default.log.现在,这设置error_reporting为我在php.ini中设置的相同值,所以这里显然有些错误.此外,它不会记录捕获的错误:行为与nginx日志的行为相同.我尝试使用数值(22527)代替,但仍然没有运气.

我不关心条目最终在哪个日志文件中(nginx与php-fpm),但我确实需要在某处记录捕获的错误.我可以使用注入我自己的错误和异常处理程序,但这有点hackish,所以我宁愿避免这种情况.

php fastcgi nginx

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

带查询参数的静态文件

我有一个nginx web服务器和CodeIgniter作为框架.

静态文件是正确的服务器(.js,.css和其他),但是具有查询参数使得nginx将请求传递给CodeIgniter.

所以www.example.com/js/file.js服务,但www.example.com/js/file.js?key=value去CodeIgniter并返回404.

即使查询参数被传递,我如何将nginx设置为服务器静态文件?

fastcgi nginx

8
推荐指数
0
解决办法
815
查看次数

IIS上的Django:django.core.exceptions.AppRegistryNotReady:尚未加载应用程序

我一直在玩微软的Django tutoiral,它在我的Visual Studio 2015环境中使用Python 3.4.3运行良好.当我尝试通过我的网络服务器运行它时,它失败了:

Error occurred:

Traceback (most recent call last):
  File "C:\Python34\lib\site-packages\wfastcgi.py", line 805, in main
    result = handler(record.params, response.start)
  File "C:\Python34\lib\site-packages\django\core\handlers\wsgi.py", line 158, in __call__
    self.load_middleware()
  File "C:\Python34\lib\site-packages\django\core\handlers\base.py", line 51, in load_middleware
    mw_class = import_string(middleware_path)
  File "C:\Python34\lib\site-packages\django\utils\module_loading.py", line 20, in import_string
    module = import_module(module_path)
  File "C:\Python34\lib\importlib\__init__.py", line 109, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 2254, in _gcd_import
  File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
  File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked
  File "<frozen …
Run Code Online (Sandbox Code Playgroud)

python iis django fastcgi

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

在Windows上使用FastCgiModule设置Python和Flask时出现500内部服务器错误

有人能用IIS设置Python吗?一直试图弄清楚,但它不起作用,这让我发疯.我看到很多例子,但我无法让它发挥作用.


这是我的设置


  • Windows 2008R2
  • IIS 7.5(7.5.7600.16385)
  • wfastcgi.py(2.2.0)
  • 烧瓶(0.10.1)
  • Python(3.5.1)

Python + Flask网络应用程序的路径

C:\inetpub\wwwroot
Run Code Online (Sandbox Code Playgroud)

以下是我遵循的步骤:

  1. 确保已安装CGI窗口功能.
  2. 在IIS管理器中,突出显示的Web服务器和FastCGI设置中添加了一个具有以下值的应用程序:

    Full Path: C:\python35\python.exe
    
    Arguments: C:\inetpub\wwwroot\wfastcgi.py
    
    Environment Variable Collection:
    
      PYTHONPATH: C:\inetpub\wwwroot\
      WSGI_HANDLER: app.app
      WSGI_LOG: C:\logs\app.txt
    
    Run Code Online (Sandbox Code Playgroud)
  3. 创建了一个名为MyWebSite的网站,指向C:\ inetpub\wwwroot

  4. 在网站的处理程序映射设置中,为FastCgiModule添加了一个模块映射:

    Request path: *
    Module: FastCgiModule
    Executable: C:\python35\python.exe|C:\inetpub\wwwroot\wfastcgi.py
    Name: FlaskHandler
    
    Run Code Online (Sandbox Code Playgroud)

使用Flask的简单Python应用程序在网络上找到并添加到Web根文件夹.所以在C:\ inetpub\wwww只有3个文件:app.py,web.configwfastcgi.py

web.config中

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appSettings>
        <add key="PYTHONPATH" value="" />
        <add key="WSGI_HANDLER" value="app.app" />
        <add key="WSGI_RESTART_FILE_REGEX" value="(?i).*\.(py|cnf|config)$" />
    </appSettings>
    <system.webServer>
        <handlers>
            <add name="FlaskHandler" path="*" verb="*" modules="FastCgiModule" scriptProcessor="C:\python35\python.exe|C:\inetpub\wwwroot\wfastcgi.py" resourceType="Unspecified" requireAccess="Script" />
        </handlers> …
Run Code Online (Sandbox Code Playgroud)

python iis fastcgi flask

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

在web.config IIS中的PHP(或其他)CGI配置

我最近使用Wix工具集开发了一个Web应用程序的安装程序(是的,带有安装程序的Web应用程序).

该向导将指导用户获取站点安装所需的所有基本信息,如下所示:

在此输入图像描述

在安装结束时使用自定义操作,我使用文档动态配置IIS处理CGI ,将FastCGI配置为托管PHP,Python,应用程序.有很多步骤和开发来实现这个结果,但问题在于:

我安装了应用程序,一切正常,但是,如果我卸载或安装另一个实例或其他WebApplication,IIS配置的处理程序就像全局一样,并始终指向第一个安装.(卸载应用程序时出现问题)位于C:\ Windows\System32\inetsrv\config中的applicationHost.config是IIS的配置,其"config"类似于global.

<handlers accessPolicy="Read, Script">
            <add name="PHP-FastCGI" path="*.php" verb="*" modules="FastCgiModule" scriptProcessor="E:\CIM_dev\bin\php-v5.6\php-cgi.exe" resourceType="Either" />
            <add name="CGI-exe_2" path="*.exe" verb="*" modules="CgiModule" resourceType="File" requireAccess="Execute" allowPathInfo="true" />
            <add name="TRACEVerbHandler2" path="*" verb="TRACE" modules="ProtocolSupportModule" requireAccess="None" />
            <add name="OPTIONSVerbHandler2" path="*" verb="OPTIONS" modules="ProtocolSupportModule" requireAccess="None" />
            <add name="StaticFile2" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />
        </handlers>
Run Code Online (Sandbox Code Playgroud)

我的问题是,有没有办法为web.config中的每个网站进行此配置?我一直在努力尝试所有的东西而没有成功.

php iis cgi fastcgi wix

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