标签: catalyst

将CGI迁移到框架的最佳方法是什么?

我有一个在perl CGI中运行的大型Web应用程序.它运行正常,编写得很好,但是就像过去一样,所有的html都是在CGI调用中硬编码的,所以你可以想象,它很难保持,改进等等所以现在我想开始添加一些模板并与框架(催化剂或CGI ::应用程序)集成.我的问题是:这里有人有这样的经历吗?有什么我必须注意的事情吗?我知道使用这两个框架我可以运行原生CGI脚本,所以它很好,因为我可以同时运行这两个(CGI原生广告"框架"代码)而没有任何创伤.有小费吗?

model-view-controller perl cgi catalyst

7
推荐指数
1
解决办法
521
查看次数

我应该如何使用作业队列[和Perl/Catalyst]来最好地构建我的Web应用程序?

我正在使用Catalyst框架编写Web应用程序.我还使用了一个名为TheSchwartz的作业队列.

我想要使​​用作业队列,因为我希望尽可能多的特定于应用程序的代码与Web应用程序接口代码分离.

基本上整个系统由三个主要部分组成:

  • GUI(Catalyst Web界面)
  • 一个爬虫
  • "攻击组件"(正在编写应用程序以查找其他Web应用程序/站点中的XSS和SQLi漏洞)

因此理论上,GUI为爬虫创建作业,从而为"攻击组件"创建作业.

目前我在Catalyst中有一个Model,它实例化一个TheSchwartz对象,以便Web应用程序中的控制器可以将作业添加到作业队列中.

我还需要创建一些工作者脚本来持续监听(/检查数据库)新的作业,以便他们可以执行所需的操作.目前TheSchwartz的数据库特定内容是在Catalyst中的模型中,我认为我不能轻易访问Catalyst之外的内容?

我不想在模型中复制TheSchwartz作业队列的数据库连接数据,然后在我的作业工作者脚本中复制数据库连接数据.我应该在位于Catalyst外部的另一个类中包装TheSchwartz对象的创建,并在当前实例化TheSchwartz对象的模型中调用它吗?然后我也可以在工作脚本中使用它.或者我应该在配置文件中包含数据库数据并在需要时实例化新的TheSchwartz对象(在Catalyst /内部作业工作者脚本中)?

或者我只是在想这个?

一些内容丰富的Web应用程序架构文章的链接也可能很有用(我之前从未构建过一种复杂的复杂性).

干杯

architecture perl web-applications catalyst job-queue

7
推荐指数
1
解决办法
1172
查看次数

从Text :: Xslate中的Template :: Toolkit获取WRAPPER功能

我已经将Template :: Toolkit用于我的最后几个Catalyst项目,并且有一个我喜欢使用的设置,可以清晰地分离我的模板.现在我希望使用Text :: Xslate,但是我无法弄清楚我是否可以进行相同的设置.以下是我通常用于Template :: Toolkit的内容.

__PACKAGE__->config({
    ...
    WRAPPER      => 'site/wrapper',
    ...
});
Run Code Online (Sandbox Code Playgroud)

包装纸

[% content WRAPPER site/html + site/layout %]
Run Code Online (Sandbox Code Playgroud)

HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
  <title>[% template.title or site.title %]</title>
  <style type="text/css">
  </style>
 </head>
 <body>
[% content %]
 </body>
</html>
Run Code Online (Sandbox Code Playgroud)

布局

<div id="header">[% PROCESS site/header %]</div>

<div id="content">
[% content %]
</div>

<div id="footer">[% PROCESS site/footer %]</div>`
Run Code Online (Sandbox Code Playgroud)

然后页眉和页脚都有自己的内容.我喜欢这个解决方案,因为所有内容都是干净利落的,我不会在内容中分解任何div标签,因为必须将开头标记放在标题中并关闭页脚.它看起来像TTerse语法有一些包装器功能,但我不确定是否允许我重新创建我通常做的.我也发现这个答案说你可以在理论上使用包装器,但实际上没有给出任何例子.

perl catalyst template-toolkit text-xslate

7
推荐指数
1
解决办法
86
查看次数

如何防止DBIx :: Class :: Schema :: Loader在Catalyst中自动添加InflateColumn :: DateTime?

我正在使用CatalystDBIx :: Class :: Schema :: Loader在Catalyst中创建我的模型,如下所示:

script/myapp_create.pl model DB DBIC::Schema MyApp::Schema create=static overwrite_modifications=1 components=EncodedColumn dbi:mysql:mydb mydb pass
Run Code Online (Sandbox Code Playgroud)

不幸的是,加载器自动设置InflateColumn::DateTime为默认组件,我不想要.我想要数据库中的原始值.

__PACKAGE__->load_components("InflateColumn::DateTime", "EncodedColumn");
Run Code Online (Sandbox Code Playgroud)

谁能告诉我如何防止这种情况?

perl catalyst dbix-class

6
推荐指数
1
解决办法
1868
查看次数

如何将我的Catalyst应用程序部署为debian软件包(或合适的替代方案)?

在测试了我的Catalyst应用程序并决定部署它之后,我想将其打包,以便我可以轻松地将其插入登台和活动服务器,管理依赖关系并通过软件包版本控制的灵活性轻松回滚.由于我的生产操作系统是Ubuntu,我认为将其打包为deb包将是​​最有意义的.

我预测我将不得不创建我的所有perl模块依赖项的第二个包,因为许多不是由我的发行版提供的,或者是独立打包它们 - 尽管这可能是很多工作.

有没有人有这样做的经验 - 或者一个理智的,类似的替代方案?

ubuntu perl debian packaging catalyst

6
推荐指数
1
解决办法
532
查看次数

如何在Catalyst应用程序中正确使用Schema中的UTF-8编码数据?

在Catalyst应用程序或模板中定义的数据具有正确的编码并且显示良好,但是从数据库中将所有非Latin1转换为?.我想问题应该在模型类中,这是这样的:

use strict;
use base 'Catalyst::Model::DBIC::Schema';

__PACKAGE__->config(
 schema_class => 'vhinnad::Schema::DB',

 connect_info => {
     dsn => 'dbi:mysql:test',
     user => 'user',
     password => 'password',
     {
         AutoCommit        => 1,
         RaiseError        => 1,
         mysql_enable_utf8 => 1,
     },
     'on_connect_do' => [
             'SET NAMES utf8',
     ],      
     }
);

1;
Run Code Online (Sandbox Code Playgroud)

我看到这里没有瑕疵,但有些事情一定是错的.我使用我的架构也测试脚本和数据编码良好,输出正确,但在Catalyst应用程序内我没有得到正确的编码.哪里可能有问题?

编辑

为了将来的参考,我把解决方案放在这里:我混合了连接信息的新旧风格.

旧式就像 (dsn, username, passw, hashref_options, hashref_other options)

新风格(dsn => dsn, username => username, etc),所以正确使用:

 connect_info => {
     dsn               => 'dbi:mysql:test',
     user              => 'user',
     password          => 'password',
     AutoCommit        => …
Run Code Online (Sandbox Code Playgroud)

perl utf-8 catalyst dbix-class

6
推荐指数
1
解决办法
2085
查看次数

以干净的方式查看变量内容

所以我用来查看变量内容的方法是在我的模板工具包中使用Data :: Dumper:

[% USE Dumper %]
[% Dumper.dump(varname) %]

但是我得到的结果有点乱 - 关于表关系,列类型和attrbitues等的所有信息.

我想知道是否有一种方法可以获得一个"干净"的变量内容 - 因为只有来自查询的当前结果+相关的结果集(即当我使用带有cakephp框架的php时,有一个'debug(varname)'命令提供了这样的结果,看起来像这样http://pastebin.com/Hut0LnAb).

perl catalyst template-toolkit

6
推荐指数
1
解决办法
221
查看次数

Catalyst中的详细调试屏幕?

在我的舞台服务器中,我想激活调试,以便客户端可以在应用程序进入生产服务器之前找到自己的错误.

但我只想要消息的第一部分,而不是请求或会话数据.

例如:无法渲染模板"templates/home.tt2:file error - templates/inc/heater:not found".

该消息足以让我和我的客户看到"标题"调用拼写错误.

请求为客户提供了大量无关信息,但也有大量内部开发信息,应该一直隐藏!

问候

perl catalyst template-toolkit

6
推荐指数
1
解决办法
364
查看次数

Catalyst事件循环一次只到达一个客户端

我正在开发一个Catalyst/psgi应用程序,它可以很好地利用异步流,但不仅仅是一个简单的计时器(比如这里:http://www.catalystframework.org/calendar/2013/13),我有点儿难以理解如何实施更多"全球"事件.

通过全球事件,我的意思是:

  1. 定期计时器,对所有客户端都是相同的
  2. 单个客户端访问给定页面(但更新所有客户端)
  3. 文件统计观察程序,它将在文件更改时更新所有客户端.

如果我错了,请纠正我,但对我来说,这些似乎与上面链接的示例非常不同,这将给每个客户一个不同的计数器.我想让事件"全面发生".

我尝试过的一个例子(使用上面列表中的#2):

has 'write_fh' => ( is => 'rw', predicate => 'has_write_fh' );

sub events : Path('/stream') Args(0) {
    my ( $self, $c ) = @_;
    $c->res->body("");
    $c->res->content_type('text/event-stream');

    $self->write_fh( $c->res->write_fh() );
}

sub trigger : Path('/trigger') : Args(0) {
    my ( $self, $c ) = @_;

    $self->write_fh->write( *the event string* );
}
Run Code Online (Sandbox Code Playgroud)

当我运行它时,它实际上比我预期的更进一步 - 事件确实被触发,但不可靠.打开两个浏览器,有时会将事件发送到一个,有时发送到另一个.

现在,我想我明白为什么这样做永远不会有效 - 遇到/触发的客户端,不知道正在观看/流的所有其他客户端,所以我尝试使用的write_fh没用.

但是,如果每个客户的请求都在其自己的包含气泡中,我如何从其他请求访问其流?

或者我完全走错了轨道......?

perl catalyst psgi

6
推荐指数
1
解决办法
153
查看次数

在具有项目框架依赖项的应用程序中嵌入 XCFramework

我有一个 Xcode 工作区,其中包含一个带有 iOS 应用程序目标的项目和另一个带有 Framework 目标的项目。框架目标依赖于另一个框架,该框架以以下形式集成xcframework

  • 我的应用程序
  • 我的框架
  • 其他框架

使用常规OtherFramework.framework将需要将其链接到MyFramework然后嵌入其中,MyApp即使MyApp不需要框架本身。但是,当与 集成时xcframework,此项目将无法构建并出现No such module 'OtherFramework'错误。

项目设置:

我的框架项目

我的应用项目

OtherFramework.xcframeworkMyApp目标中删除修复了构建问题,但随后会导致library not loaded错误,因为应用程序中不存在框架。

演示项目在这里:https : //github.com/msaps/XCFramework-Link-Issue

您打算如何xcframework在应用程序中链接 an并在依赖框架中链接?

为什么?

pyckamil刚刚发布了这篇文章,详细解释了这个问题:everything wrong with XCFrameworks

事实证明,XcodeProcessXCFrameworkLibrary.framework.xcframework活动构建架构中提取正确信息的步骤进行了优化。这只会运行一次,这会导致尝试链接同一框架的其他目标出现问题。

更新

此问题已在 Xcode 12.0 中解决

xcode catalyst ios swift xcframework

6
推荐指数
1
解决办法
7388
查看次数