• nginx下的alias好像是为只为静态文件服务的,对于FastCGI如PHP之类的总是会出现错误,典型的就是404。

    对此,网上已经有了一些解决方案,如:http://u.odo.com.cn/space-2-do-blog-id-3087.html 如此设置在应用相对简单下的确可用,如根目录并没有程序或不需要rewrite等情况。

    而在实际应用中往往需要相对更复杂的配置,如流行的单入口程序需要将不存在的文件访问交给index.php,这样就会存在冲突而导致访问错误。而且如此配置也会对未来的扩展带来维护风险。

    近期我也遇到了这个问题,问了下google也没有找到合适的答案,为此我想何不反其道而行之,将一个vhost拆分成多个,由根目录进行proxy代理解决,配置如下:

     

    location ^~ /bbs {
        alias /srv/www/bbs;
        proxy_set_header Host bbs.xxx.com;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass http://127.0.0.1;
    }
    

     

    location 的 ^~ 含义是匹配此路径后无视其他 location 配置, 包括 location /。这样 rewrite 或其他就配置不会对此产生任何影响。

    到这里可能就有人要问,既然这么麻烦为什么不直接使用虚拟主机,而要反向代理多一次请求呢?

    对此呢原因是很多可能的,比如AJAX、javascript、cookie等在跨域情况下不易处理,URL向前兼容等。

  • 自愚人节GoogleAppEngine开了一个玩笑后,今天正式宣布GAE支持JAVA语言,并声称,这次是真的(Seriously this time)。

    据博客所说,这次只限前1万名用户提前试用,申请地址为:http://appengine.google.com/,若这是第一次注册需要手机短信验证。

    Google Code上有appengine-java-sdk-1.2.0.zip提供下载,同时更新的还有一款Eclipse插件,地址:http://code.google.com/eclipse

    目前GAE支持Google的GWT框架及JDO、JPA与Servlet。

    此次JAVA也像Python一样,只提供GAE支持的服务,传统的SSH组合估计无法在此平台运行,这对于JAVA爱好者的确是一个遗憾。

  • 转载:mod_wsgi介绍中文翻译(一)

    日期:2009-03-27 | 分类:

    本文转载自:奋斗足迹  作者:崔玉松 原文地址:http://fendou.org/2009/03/27/mod_scgi_description/

     

    什么是mod_wsgi ?

    mod_wsgi的目标是实现一个简单的Apache模块,支持任何Python WSGI的接口的Python应用程序的托管。该模块适用于高性能生产的WEB站点,同时也适用于自己维护站点的WEB 服务托管(虚拟主机环境–译者注)。

    运行模式

    用mod_wsgi来托管应用,有两个主要的模式可以使用,一种是“嵌入式”模式,Mod_wsgi与Mod_python运行方式相同,所有的 python代码都将在apache 子进程中执行。因此当WSGI应用在此模式下运行可以与其他的Apache托管的模块PHP和Perl共享形同进程。

    另一个在UNIX Apache 2.*环境下可选替代的daemon模式,这种模式运作的方式在类似的FastCGI / SCGI解决方案,即在不同的进程运行WSGI应用。与FastCGI / SCGI解决方案不同的是,当执行WSGI程序时不需要单独的基础结构(infrastructure),一切都是自动处理的mod_wsgi。

    一切都是自动处理的mod_wsgi,影响正常使用的Apache模块的PHP , Perl或其他语言的Apache子进程服务的静态文件和主机应用程序使用大大减少。守护(daemon)进程可能需要时也可以作为一个独特的用户运行以确保WSGI应用程序之间不能互相干扰或获取信息。

    服务性能

    该mod_wsgi模块是用C代码直接对内部的Apache和Python应用程序接口编程。因此,服务WSGI应用与Apache它具有较低的内存开销和性能优于现有的WSGI适配器mod_python或替代的FastCGI / SCGI / CGI或代理的解决方案。

    虽然嵌入式技术模式能够表现得更好, daemon模式通常是最安全的选择使用。这是因为要嵌入模式高性能需要调整apache MPM设置,默认设置偏向于服务静态媒体和PHP应用。如果Apache 的MPM设置未与服务的应用相对应,将会表现出糟糕的性能而不是更好的性能。

    因此,除非你非常熟悉Aapache的配置,否则推荐使用daemon模式,总体而言,大型Python Web程序,通常你不能看出嵌入式(embedded mode)和守护模式(daemon mode)明显的差异,因为瓶颈在Python Web和数据库访问上。

    支持的应用

    mod_wsgi遵循WSGI接口规范,任何符合WSGI接口规范的Python Web框架或者应用都可以被支持。

    我们所熟悉的主要的Python web框架或工具,包括CherryPy, Django, Karrigell, Pylons, TurboGears, web.py, Werkzeug 和Zope 运行良好,我们所熟知的主要的Python web应用包括MoinMoin, PyBlosxom 和 Trac 能够很好的运行。

    系统要求

    mod_wsgi软件包可以编译和使用任何的Apache 1.3 , 2.0或2.2 UNIX系统(包括Linux ),以及Windows操作系统。无论是Apache MPM的单线程“prefork” 或者多线程的“worker”只能在unix/linux系统中使用。daemon模式的mod_wsgi仅限于运行于UNIX/LINUX环境的 Apache 2.0或2.2上,而且要求Apache的基本运行环境库已经编译并支持多线程。

    需要Python 2.3以上版本并且已经编译支持多线程,如果你想尝试Python 3.0,需要从Subversion仓库中下载源代码编译 mod_wsgi。

    使用入门

    最新的版本,并建议mod_wsgi是2.3

    确保您首先阅读“安装与配置”,指南为开发者提供了获得Mod_wsgi 最大产出指导,也可以提供问题调试的协助或者提出问题。

    如果你不明白你的应用出了什么问题或者你觉得你发现了Mod_wsgi的问题,你可以在mod_wsgi群组论坛中提出问题

    资助

    开发开源软件往往被认为吃力不讨好的事情,如果您想展示你对实际上一直在帮助你的软件的赞赏,作为一种反馈,你可以将你成功或失败等要说明的任何问题张贴到用户组中,通过你的反馈,人们才可以知道软件是否正确的工作着,软件或者文档如何改进,以更好的满足你的需要,如果这些听起来非常辛苦,至少在考虑帮助我们提升声望排名。

    还请注意,与一些论坛上的传闻相反,这个项目与Google没有任何关系,也没有接受Google(或其他公司)任何形式的资助,唯一与 Google有关系的是,该项目托管在代码自由和公开的Google代码托管服务商。这个项目的所有开发花费的都是我个人时间,如果你发现他对你有益,并且希望以更具体的方式捐助,请为我的Amazon上的愿望列表买单或者通过PayPal捐助,如果是作为公司的一笔小的捐款,可以提供报表或者发票用于会计。

    祝用得愉快

    Graham Dumpleton

  • 从MediaWiki迁移到Trac

    日期:2009-03-27 | 分类:

    MediaWiki是一款非常优秀的资料管理系统,用来管理技术文档是一个不错的选择,在很长的一段时间,我们用的也是这个。

    近期随着Trac在部门内使用和一些超强的插件如:ChangeLogPluginIncludeSourcePartialPlugin给文档编写带来的巨大便利,于是我们决定转投Trac来维护文档资料。

    做完决定后就要考虑将文档转帖过来,但是由于两者WIKI语法并不兼容,重新整理的工作量太大,貌似有批量转换工具,但是由于我们原来的文档比较混乱,各部门的都有,因此不想使用。幸好trac-hacks.org有一个MediaWikiPluginMacro可用,此插件可使用MediaWiki语法,如:

    {{{
    #!mediawiki
    = Heading =
    Everything here is interpreted by ''mediawiki'' processor.
    
    == List ==
    # first
    ## first.a
    ## first.b
    
    [[Wiki link]]
    }}}

    但是这个两年多没有维护的插件刚开始用就给我提示:TypeError in nextItem(),在http://trac-hacks.org/ticket/2941有热心人提供了解决方案。下载parser.py后覆盖原文件,重新安装,OK,这下不提示错误了,不过还有另外一个问题,就是WIKI中文链接貌似没有解析,全成了 [[文字]] 这样子,而英文链接则表现正常,初步判断为解释器没有对中文进行匹配,这个只能自己动手了。先拿最大的parser.py开刀,在925-963行找到了如下代码:

    _linkPat = re.compile(ur'^([A-Za-z0-9\s]+:)?([A-Za-z0-9_\.\-\s\/]+)(?:\|([^\n]+?))?\]\](.*)$', re.UNICODE | re.DOTALL)
    def replaceInternalLinks(text):
            arr = text.split('[[')
            sb = []
            sb.append(arr.pop(0))
            for bit in arr:
                    namespace, link, alt, rest = None, None, None, None
                    match = _linkPat.match(bit)
                    if match:
                            namespace, link, alt, rest = match.groups()
                    if link:
                            if not namespace:
                                    namespace = u'wiki'
                            namespace = slugify(namespace)
                            if namespace == "image":
                                    sb.append(u'<a href="/image/')
                                    sb.append(slugify(link))
                                    sb.append(u'"><img src="/static/')
                                    sb.append(link)
                                    if alt:
                                            sb.append(u'" alt="')
                                            sb.append(alt)
                                    sb.append(u'" /></a>')
                            elif namespace == 'wiki':
                                    sb.append(u'<a href="')
                                    #sb.append(u'<a href="/')
                                    #sb.append(namespace)
                                    #sb.append(u'/')
                                    sb.append(slugify(link))
                                    if alt:
                                            link = alt
                                    sb.append(u'/">')
                                    sb.append(link)
                                    sb.append(u'</a>')
                            sb.append(rest)
                    else:
                            sb.append(u'[[')
                            sb.append(bit)
            return u''.join(sb)
    简单分析后我判断这段代码就是解析链接标签并进行相应替换。分析后可知,925行的正则表达式只匹配了英文字母、数字、英文.、-、空白字符与/,中文字符并不在此范围内,增加一个\w后如下:
    _linkPat = re.compile(ur'^([A-Za-z0-9\s]+:)?([A-Za-z0-9_\.\-\s\/\w]+)(?:\|([^\n]+?))?\]\](.*)$', re.UNICODE | re.DOTALL)
    使用python setup.py bdist_egg重新编译为egg文件后复制到trac_dir/plugins目录,问题解决。
  • Apache使用mod_wsgi安装Trac

    日期:2009-03-26 | 分类:

    Trac是一款使用Python开发的WEB项目管理系统,集SVN、文档、任务管理于一体,基于BSD协议发布。

    Trac在Apache上的选择一般只有CGI、FastCGI、mod_python几种选择,CGI速度太慢,FastCGI在Apache上的表现又不够稳定,似乎只有一个mod_python的选择可用,而WSGI的出现改变了这一情况,这个2006年诞生的标准得到了Python WEB开发领域的一致欢迎,Trac也对此提供了支持。

    mod_wsgi的下载安装请参考这里:http://code.google.com/p/modwsgi/

    编译完成后,修改httpd.conf文件,确认如下选项是打开的:

    LoadModule wsgi_module modules/mod_wsgi.so

    创建trac.wsgi文件,这是一个Python文件:

    import os
    
    os.environ['TRAC_ENV'] = '/path/to/trac'
    os.environ['PYTHON_EGG_CACHE'] = '/tmp'
    
    import trac.web.main
    application = trac.web.main.dispatch_request

    Apache配置,请将以下代码放入httpd.conf:

    WSGIScriptAlias /trac /paty/to/trac/trac.wsgi
    <Directory /paty/to/trac>
        WSGIApplicationGroup %{GLOBAL}
        Order deny,allow
        Allow from all
    </Directory>
    

    配置完成后,若显示不正常,可将wsgi脚本改为如下内容,测试是否可输出“Hello World!”

    def application(environ, start_response):
            start_response('200 OK',[('Content-type','text/html')])
            return ['<html><body>Hello World!</body></html>']
    

     

    若以上脚本执行成功,则代表wsgi安装正确,但如果你使用的是Python 2.4以上版本可能会遇到另一个问题,那就是Trac始终显示白页,没有任何输出!

    检查error.log文件

    httpd: Objects/stringobject.c:105: PyString_FromString: Assertion `str != ((void *)0)' failed.
    [Fri Mar 20 20:39:03 2009] [notice] child pid 8734 exit signal Aborted (6)

    由此可得知mod_wsgi线程崩溃掉了,Google一下,在这里得到一些资料,看来wsgi应用在Apache下崩溃的不止是Trac,Django也是有可能的。

    根据作者的提示得知,这是由于Apache与Python的expat库版本不匹配导致。

    Apache expat版本:

    httpd-2.2.8/lib $ strings libexpat.so.0.1.0 | grep expat_
    expat_1.95.2

    Python expat版本:

    /opt/httpd-2.2.8/lib $ python
    Python 2.4.3 (#1, May 24 2008, 13:47:28)
    [GCC 4.1.2 20070626 (Red Hat 4.1.2-14)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import pyexpat
    >>> pyexpat.EXPAT_VERSION
    'expat_1.95.8'

    找到原因后就好办了,但是作者只提了一句下载expat 2.0.1安装,却没说如何安装到Apache,Apache的configure本身并没有with-expat参数,只有apache_src/srclib/apr-util/configure有这个参数却不知如何关联,无奈之下另找方案。

    检查httpd依赖的库:

    /opt/httpd-2.2.8/bin $ ldd httpd
            linux-gate.so.1 =>  (0x002e6000)
            libm.so.6 => /lib/libm.so.6 (0x00cd8000)
            libaprutil-1.so.0 => /opt/httpd-2.2.8/lib/libaprutil-1.so.0 (0x00c1e000)
            libexpat.so.0 => /opt/httpd-2.2.8/lib/libexpat.so.0 (0x00925000)
            libapr-1.so.0 => /opt/httpd-2.2.8/lib/libapr-1.so.0 (0x003df000)
            libuuid.so.1 => /lib/libuuid.so.1 (0x00110000)
            librt.so.1 => /lib/librt.so.1 (0x00d91000)
            libcrypt.so.1 => /lib/libcrypt.so.1 (0x0023d000)
            libpthread.so.0 => /lib/libpthread.so.0 (0x00d01000)
            libdl.so.2 => /lib/libdl.so.2 (0x00cd2000)
            libc.so.6 => /lib/libc.so.6 (0x00402000)
            /lib/ld-linux.so.2 (0x00b6f000)

    由此可知Apache使用的是/opt/httpd-2.2.8/lib/libexpat.so.0,而这个文件是一个软链接,尝试将其删除,重新指到2.0.1:

    /opt/httpd-2.2.8/lib $ ln -s /opt/expat-2.0.1/lib/libexpat.so.1.5.2 libexpat.so.0

    重新启动Apache, 测试成功!

    参考资料:

    expat下载地址

    Trac官方安装资料

    mos_wsgi官方对此问题的方案

  • Jython使用JDBC连接数据库

    日期:2009-03-09 | 分类:

    Jython是使用JAVA实现的Python,在拥有Python灵活、快捷优点的同时又可以无缝调用JAVA庞大的类库。

    而我使用Jython的主要原因是:它可以实现真正的多线程,充分发挥多CPU的性能。

    Jython目前的最新版是2.5b1,经测试大部分Python 2.4的特性已被支持,但是在连接Mysql数据库这一步却始终无法成功,按照网上其他人的说明,下载mysql-connector-java-3.1.12-bin.jar,并配置CLASSPATH指向mysql-connector-java-3.1.12-bin.jar,启动Jython:

    d:\>jython
    Jython 2.5b1 (trunk:5903:5905, Jan 9 2009, 16:01:29)
    [Java HotSpot(TM) Client VM (Sun Microsystems Inc.)] on java1.5.0_17
    >>> import java
    >>> java.lang.Class.forName('com.mysql.jdbc.Driver')
    Traceback (most recent call last):
      File "", line 1, in 
            at java.lang.Class.forName0(Native Method)
            at java.lang.Class.forName(Class.java:164)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
            at java.lang.reflect.Method.invoke(Method.java:585)
    
    java.lang.ClassNotFoundException: java.lang.ClassNotFoundException: com/mysql/jdbc/Driver
    

    找不到类?找到懂JAVA的同事,直接用JAVA写了段连Mysql的程序,测试,正常!由此证明CLASSPATH及JDBC驱动是正常的,那么Jython为什么找不到呢,四处查找资料,有人说要将mysql驱动放到Java/lib文件夹下,还有人说要放Tomcat下,还有说放WEB-INF/lib下.....统统没有帮助!

    下载了一本比较老的《Jython程序设计》,这好像也是目前唯一一本讲Jython的书,在此书的数据库编程一章,讲到了另一个启动Jython的方法:java -Dpython.name=d:\jython2.5b1 -cp d:\jython2.5b1\jython.jar org.python.util.jython

    -cp参数用来指定CLASSPATH,由此想到能不能直接在这里指定mysql的路径呢,改一下:

    d:\>java -Dpython.name=d:\jython2.5b1 -cp .;d:\mysql-connector-java-3.1.12-bin.jar;d:\jython2.5b1\jython.jar org.python.util.jython
    Jython 2.5b1 (trunk:5903:5905, Jan 9 2009, 16:01:29)
    [Java HotSpot(TM) Client VM (Sun Microsystems Inc.)] on java1.5.0_17
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import java
    >>> java.lang.Class.forName('com.mysql.jdbc.Driver')
    <type 'com.mysql.jdbc.Driver'>
    >>>
    

    到此总算是找到驱动了,Jython 2.5b1已经整合了zxJDBC,接下来的事情就好办多了。

    所我判断,此问题应该是jython.bat批处理对CLASSPATH进行了修改,导致Jython无法找到驱动,当年对批处理只学了个皮毛,瞧了半天也没瞧出个所以然来!先在此记一笔,希望对遇到此问题的朋友提供点帮助。

    2009-3-18 UPDATE: Jython 2.5b3已经发布,此版本已经修复了这个bug。

  • Leopard 下安装 mysql-python

    日期:2008-12-20 | 分类:

    最近学起了Python,写了两个Hello world之类的程序后琢磨该搞搞数据库了,上网找了个例子,运行:

    ImportError: No module named MySQLdb

    哦,要单独装模块,那就装吧,http://sourceforge.net/projects/mysql-python/ 下载MySQL-python-1.2.2.tar.gz  解压缩

    $sudo python setup.py install
    In file included from /Applications/MAMP/Library/include/mysql/mysql.h:43,
      from _mysql.c:40:
    /usr/include/sys/types.h:92: error: duplicate ‘unsigned’
    /usr/include/sys/types.h:92: error: two or more data types in declaration specifiers
    In file included from /Applications/MAMP/Library/include/mysql/mysql.h:43,
      from _mysql.c:40:
    /usr/include/sys/types.h:92: error: duplicate ‘unsigned’
    /usr/include/sys/types.h:92: error: two or more data types in declaration specifiers
    lipo: can't open input file: /var/tmp//ccOjTKGp.out (No such file or directory)
    error: Setup script exited with error: command 'gcc' failed with exit status 1
    

    得,出错啦!编辑mysql.so通不过,这可怎么办!搜吧,嘿 还真有不少人遇到和咱一样的麻烦,有人推荐用macports来重装Python,这咱就不乐意了,下载编译时间长不说,系统有两Python太容易出问题了,抛除此方案。

     又有建议,修改 mysql 的mysql.h, 注释掉 #include <sys/types.h>, 试了下,依然报错。

    不是吧,难道真的无解啦?还是RP有问题?不行,不服,再找!

    功夫不负有心人,老外的力量还是很强大的,凭着咱那蹩脚的英语终于找到了条成功之路!

    1. 进入解压后的mysql-python
    2. 修改 _mysql.c 文件
    3. 注释掉 /*#define uint unsigned int*/ 我这里是38行
    4. 一般这里还会出错,那么修改 site.cfg, 设置 threadsafe = False
    5. 如果你的 mysql_config 不在PATH里,那么顺便修改下这里的路径

    至此,编译安装通过,测试一下:

        $python
    >>>import MySQLdb
    >>>MySQLdb.apilevel
    '2.0'
    

    总结:至此终于解决了在其他系统中不会出现的困难!

  • Dreamweaver CS4 for Mac 解决过期问题

    日期:2008-12-08 | 分类:

    Dreamweaver CS4终于发布了, 界面风格重新设计,终于和Flash,PS等统一了, 兴冲冲找到一序列号下载安装后用了一个月就打不开了,提示:“cs4 Licensing for this product has expired”

    唉,谁让咱装的时候没看清楚破解文档呢。 没办法,删掉重装吧,谁知换个序列号刚打开,还是给出“cs4 Licensing for this product has expire”这张破脸! 郁闷啦,难道我要重装系统才行!黑苹果耶,重装灰常麻烦的!!

    死马当活马医,琢磨下既然是授权过期, 那就试着把时间往前调一下,搞个2007年,居然打开了,但是咱不能一直生活在2007年啊,这样不好!找找看有没有什么玄机。

    居然真被我找着了,Help菜单下有一个Deactivate,勾选“Erase my serial number from this computer after deactivation completes”, 这样就清除了系统的激活序列号,OK,下面删除重装。

    正确安装方法:

    1. 安装时以试用版安装,不要输入序列号。
    2. 安装完成后运行一下CS4,依然不输入序列号,退出
    3. 使用Block Adobe Activation屏蔽Adobe激活地址,按此下载
    4. 启动Dreamweaver CS4, 输入序列号,CS4序列号算号器下载

     至些大功告成,将时间调到2009年,依然成功!

    需要注意的是,算号器是exe格式的,要在虚拟机运行或windows计算成功后保存到文本文件中。

     

  • 好像从 Mac OS 10.4开始, 内核默认的FSB为200, 这就导致在我的Celeron 530中时间很慢, 一秒钟的时间变的很长, 经过无数的搜索后(感谢Google)终于找到解决问题的办法。

    1、 打开终端
    2、 sudo vi /Library/Preferences/SystemConfiguration/com.apple.Boot.plist
    3、 输入密码后可以看到在Kernel Flags下有一个空,在中间加入cpus=1 platform=X86PC fsb=133

    cpus=1是让系统使用单核,目前x86版的MacOS使用双核启动不起来。

    platform=X86PC据说加上这句会速度更快些,但是我没有感觉到

    fsb=133是我CPU的外频,请根据实际情况改成自己CPU的外频就可以了。

  • 在老外一博客上看到的, 先抄过来,有人看不懂的话改天再翻译。

     This workaround will help you to remove the "_CFGetHostUUIDString: unable to determine UUID for host. Error: 35" error.


    1.) BACKUP your /Library/Preferences/SystemConfiguration/NetworkInterfaces.plist
    2.) Open /Library/Preferences/SystemConfiguration/NetworkInterfaces.plist
    3.) ADD AFTER Ethernet the following:

    BSD Name
    en3
    IOBuiltin

    IOInterfaceType
    6
    IOInterfaceUnit
    3
    IOLocation

    IOMACAddress

    ABbPoF5V

    IOPathMatch
    IOService:/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/P0P3@1C,2/
    IOPCI2PCIBridge/pci14e4,4311@0/AirPort_Brcm43xx/IO80211Interface
    SCNetworkInterfaceType
    IEEE80211

    4.) IF you have more than 3 interfaces or there is an "en3" interface change it to "en4" or a higher number, don't forget to change this "3" to "4".
    5.) You need to REBOOT
    6.) If this work for you please tell me. 
    7.) If this workaround did not work please provide your system.log and yourNetworkInterfaces.plist.

    Why does this error happen?
    Well at looking at the source code of the configd there is a plugin "InterfaceNamer" it seams the plugin will always skip interfaces 
    that are IOBuiltin = false. The "IOBuiltin" cannot be changed because the plugin will check and restore it on next boot.
    But it does not check if wireless interfaces SCNetworkInterfaceTypeIEEE80211 are IOBuiltin.
    Like I say this is only a workaround and there will be more need of testing.

    You will find me on irc 

    SnE
  • 我是一个懒人,所以喜欢使用Apache、MySQL、PHP的集成包搭建开发环境,免得一个一个安装多麻烦。

    使用MacOS后也找到了一个非常优秀的集成包 MAMP,但是这个集成包在命令行下居然无法使用,提示信息如下:

     

    $ ./php -v
    dyld: NSLinkModule() error
    dyld: Library not loaded: /Users/severin/Dev/Projects/MAMP_1.7_src/lib/libltdl.3.dylib
    Referenced from: /Applications/MAMP/bin/php5/lib/php/extensions/no-debug-non-zts-20050922/mcrypt.so
    Reason: image not found
    Trace/BPT trap

     

    使用以下方法重新定义一个变量:

     

    $ export DYLD_LIBRARY_PATH=/Applications/MAMP/Library/lib:${DYLD_LIBRARY_PATH}

     

    推荐将以上这行加入到 ~/.profile 中,这样每次启动都会自动执行。

    这样php、pear、Symfony之类的命令行都正常了。

  • 好像从 Mac OS 10.4开始, 内核默认的FSB为200, 这就导致在我的Celeron 530中时间很慢, 一秒钟的时间变的很长, 经过无数的搜索后(感谢Google)终于找到解决问题的办法。

    1、 打开终端
    2、 sudo vi /Library/Preferences/SystemConfiguration/com.apple.Boot.plist
    3、 输入密码后可以看到在Kernel Flags下有一个空,在中间加入cpus=1 platform=X86PC fsb=133

    cpus=1是让系统使用单核,目前x86版的MacOS使用双核启动不起来。

    platform=X86PC据说加上这句会速度更快些,但是我没有感觉到

    fsb=133是我CPU的外频,请根据实际情况改成自己CPU的外频就可以了。