V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tychio
V2EX  ›  Perl

perl 的打包部署问题

  •  
  •   tychio · 2014-07-16 10:25:14 +08:00 · 7762 次点击
    这是一个创建于 3819 天前的主题,其中的信息可能已经有所发展或是发生改变。
    接手了一个老项目用perl写的,修改tmpl模版文件在页面上能马上显示出变化,但是修改所有的pl或pm文件都不起作用,甚至把其他文件夹都改名了,只要css和template还在就没影响。

    初步推断应该是打包过的,但是没找到打包后的代码和文件,也没找到相关的脚本或配置文件用于打包。目录里只有一个build.yml,不过貌似是安装第三方包用的。

    有人遇到过这种状况吗
    14 条回复    2014-07-16 17:21:57 +08:00
    11138
        1
    11138  
       2014-07-16 10:50:41 +08:00
    这个项目是什么应用?web吗?那可能要重启一下相关的perl进程(fastcgi)。
    tychio
        2
    tychio  
    OP
       2014-07-16 11:35:16 +08:00
    @11138 是web,在virtualbox中,连virtualbox都重启了也没用。有2个服务器同时用,apache+mod_perl以及nginx+fastcgi。restart之后都还是没变化。
    11138
        3
    11138  
       2014-07-16 12:00:34 +08:00   ❤️ 1
    那你看看apache和nginx的配置文件,看看pl或pm实际文件的位置是不是你所更改文件的位置。

    “初步推断应该是打包过的”这是什么意思?例如看fastcgi的配置,它启动了哪些pl文件是很明确的啊,如果查看这些pl文件是源代码那就一定可以修改,如果是二进制文件那就是经过了加密那就麻烦些。
    tychio
        4
    tychio  
    OP
       2014-07-16 14:03:54 +08:00
    @11138 fastcgi.conf里面是一行行这样的东西,看不出是启动了哪些pl文件


    fastcgi_param QUERY_STRING $query_string;
    fastcgi_param REQUEST_METHOD $request_method;
    11138
        5
    11138  
       2014-07-16 14:16:09 +08:00
    nginx+fastcgi 这个组合的话, 肯定还有一个独立启动pl的脚本(FastCGI服务器),而 nginx.conf 中的 fastcgi_pass 会指定 fastcgi 的主机和端口或者unix sock文件。
    tychio
        6
    tychio  
    OP
       2014-07-16 15:34:42 +08:00
    @11138 多谢你啊,但我还是没找到。在项目平级的app-modperl2-i686-el6文件夹有找到一个文件里写的fastcgi_pass,但是指向的sock文件并不存在,而且把这个文件夹整个改名了,重启服务器也没任何影响。还有个ltapp-nginx-i686-el6文件夹中只有一个sbin文件夹,里面有名为nginx的可执行文件,大小3M左右,但是同样改名后重启服务器没影响。

    实在是找不到代码在哪,请问nginx的配置是全局的吗?会不会其他地方还有一份代码,也就是说有这种可能吗,我在A份代码中启了nginx,但nginx其实用的是B份代码?
    11138
        7
    11138  
       2014-07-16 15:47:03 +08:00
    你的是什么系统?如果是linux可以用“ps -ef”查一下当前系统的所有进程。FastCGI方式启动的perl进程是常驻内存的,进程里能看到pl文件的实际位置。

    nginx启动的时候可以指定 nginx.conf 的位置,或者在默认的conf目录下面,这个配置文件是全局唯一的,但配置文件里也可以包含其它配置文件(这个比较容易找到了)。
    tychio
        8
    tychio  
    OP
       2014-07-16 16:08:57 +08:00
    @11138 哈找到conf了,里面有这么一行
    location ~ ^/(home|api|doc) {
    proxy_pass http://modperl;
    ...
    }
    这个http://modperl代表的是什么,好像直接打不开
    11138
        9
    11138  
       2014-07-16 16:14:03 +08:00
    看看 upstream 的定义应该有 modperl 吧。
    tychio
        10
    tychio  
    OP
       2014-07-16 16:32:22 +08:00
    @11138 哦,看来这不是文件夹的路径,只是url,modperl 对应127.0.0.1:12001,还是不知道这个url调用的是哪里的文件
    11138
        11
    11138  
       2014-07-16 16:35:13 +08:00
    那你查一下 12001 这个端口是哪个进程启动的啊,一步步查一下。
    tychio
        12
    tychio  
    OP
       2014-07-16 17:02:32 +08:00
    @11138 12001是apache的httpd,还有个8081是nginx,就是上面说到的sbin里的那个执行文件。这个项目是两个同时用的。从conf找进去似乎就是指向到看起来的那个文件夹了,但是修改后重启还是没用,把用来返回template的那句注释掉都没影响。
    11138
        13
    11138  
       2014-07-16 17:16:20 +08:00   ❤️ 1
    还有 apache 的配置文件里 ModPerl::Registry 配置信息看过了吗?
    tychio
        14
    tychio  
    OP
       2014-07-16 17:21:57 +08:00
    @11138 问题找到了,有一个特殊的template生成了nginx和apache的conf,指向了另外一个路径下的文件。谢谢你啦!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   934 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 19:37 · PVG 03:37 · LAX 11:37 · JFK 14:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.