posts - 8,  comments - 5,  trackbacks - 0
  2007年6月28日

    
  5月7日,惠普公司前CEO卡莉-费奥瑞娜(Carly Fiorina)在美国北卡罗来纳州农业技术州立大学毕业典礼上发表演讲。这是卡莉被惠普董事会“驱逐”后,首次在公开场合露面。  在讲演中,卡莉说, 回想起在惠普的5年,自己没有丝毫的后悔,她现在的心境非常“宁静安稳”。50岁的卡莉幽默的表示,她现在开始重新准备简历,等待面试的机会。  在这场 题为“你的天分是上帝馈赠的,你的成就是对上帝的回报”的讲演中,卡莉同时也谆谆告诫即将走入社会的毕业生,“不要放弃你的内在本性,千万不要贩卖你的灵 魂,因为没有人能够支付得起”。 以下为卡莉讲演全文。(Here's what she told the graduates and their guests at the North Carolina Agricultural & Technical State University on May 7)

Thank you, Chancellor, and good morning. I'd like to join Chancellor Renick in welcoming all of you to the 114th commencement exercises of North Carolina Agricultural and Technical State University. 
+r"y&N9v\�{x0英语博客空间(English Blogs-英语麦当劳)@;nEp7J0C
    My fellow job seekers: I am honored to be among the first to congratulate you on completing your years at North Carolina A&T. But all of you should know: as Mother's Day gifts go, this one is going to be tough to beat in the years ahead.
n8PI Z"h Ut`O5K0
A1_�x q.v&{V `n0    The purpose of a commencement speaker is to dispense wisdom. But the older I get, the more I realize that the most important wisdom I've learned in life has come from my mother and my father. Before we go any further, let's hear it one more time for your mothers and mother figures, fathers and father figures, family, and friends in the audience today.英语博客空间(English Blogs-英语麦当劳)FR\*Z@
英语博客空间(English Blogs-英语麦当劳)2Tc j.K7ns/aR
    When I first received the invitation to speak here, I was the CEO of an $80 billion Fortune 11 company with 145,000 employees in 178 countries around the world. I held that job for nearly six years. It was also a company that hired its fair share of graduates from North Carolina A&T. You could always tell who they were. For some reason, they were the ones that had stickers on their desks that read, "Beat the Eagles."
^-S-|x\i*u0\0英语博客空间(English Blogs-英语麦当劳)7BN2eB!J%Z8?
    But as you may have heard, I don't have that job anymore. After the news of my departure broke, I called the school, and asked: do you still want me to come and be your commencement speaker?英语博客空间(English Blogs-英语麦当劳)3~],F.Ts i@ W8i3jU

&T)r"Ar |G*`\0    Chancellor Renick put my fears to rest. He said, "Carly, if anything, you probably have more in common with these students now than you did before." And he's right. After all, I've been working on my resume. I've been lining up my references. I bought a new interview suit. If there are any recruiters here, I'll be free around 11.英语博客空间(English Blogs-英语麦当劳))xMx eUy6e'A(^

8vTX.H�b^H:a0    I want to thank you for having me anyway. This is the first public appearance I've made since I left HP. I wanted very much to be here because this school has always been set apart by something that I've believed very deeply; something that takes me back to the earliest memories I have in life.英语博客空间(English Blogs-英语麦当劳)+u$^ lz)P]RUMt
英语博客空间(English Blogs-英语麦当劳)M3qf(mwAH!y
    One day at church, my mother gave me a small coaster with a saying on it. During my entire childhood, I kept this saying in front of me on a small desk in my room. In fact, I can still show you that coaster today. It says: "What you are is God's gift to you. What you make of yourself is your gift to God."
Pj `*z3{E)u0
i L R8S|$R"o0    Those words have had a huge impact on me to this day. What this school and I believe in very deeply is that when we think about our lives, we shouldn't be limited by other people's stereotypes or bigotry. Instead, we should be motivated by our own sense of possibility. We should be motivated by our own sense of accomplishment. We should be motivated by what we believe we can become. Jesse Jackson has taught us; Ronald McNair taught us; the Greensboro Four taught us; that the people who focus on possibilities achieve much more in life than people who focus on limitations.
1U8\}�_;x,`w0
Qem9_�{0    The question for all of you today is: how will you define what you make of yourself?英语博客空间(English Blogs-英语麦当劳)'} lKP4i*r,j

:z?@}!v&W9u$V o0    To me, what you make of yourself is actually two questions. There's the "you" that people see on the outside. And that's how most people will judge you, because it's all they can see ?what you become in life, whether you were made President of this, or CEO of that, the visible you.
+l{ L6_@[+a W0英语博客空间(English Blogs-英语麦当劳)L4]7jg;W4H
    But then, there's the invisible you, the "you" on the inside. That's the person that only you and God can see. For 25 years, when people have asked me for career advice, what I always tell them is don't give up what you have inside. Never sell your soul? Because no one can ever pay you back.
%t JWs3EN[(f/T0英语博客空间(English Blogs-英语麦当劳)m} I9Mf+L!b V
    What I mean by not selling your soul is don't be someone you're not, don't be less than you are, don't give up what you believe, because whatever the consequences that may seem scary or bad -- whatever the consequences of staying true to yourself are -- they are much better than the consequences of selling your soul.
G7S*LghFc'zdl0
2R_-t^QG9x F0    You have been tested mightily in your life to get to this moment. And all of you know much better than I do: from the moment you leave this campus, you will be tested. You will be tested because you won't fit some people's pre-conceived notions or stereotypes of what you're supposed to be, of who you're supposed to be. People will have stereotypes of what you can or can't do, of what you will or won't do, of what you should or shouldn't do. But they only have power over you if you let them have power over you. They can only have control if you let them have control, if you give up what's inside.英语博客空间(English Blogs-英语麦当劳)LRE+jV _1k
英语博客空间(English Blogs-英语麦当劳)@%~;_e[w W6L
    I speak from experience. I've been there. I've been there, in admittedly vastly different ways -- and in many ways, in the fears in my heart, exactly the same places. The truth is I've struggled to have that sense of control since the day I left college.英语博客空间(English Blogs-英语麦当劳)]eL4@M-`

uy/h"E@0    I was afraid the day I graduated from college. I was afraid of what people would think. Afraid I couldn't measure up. I was afraid of making the wrong choices. I was afraid of disappointing the people who had worked so hard to send me to college.
x7k^;ht,P0
/Wx0d yx0    I had graduated with a degree in medieval history and philosophy. If you had a job that required knowledge of Copernicus or 12th Century European monks, I was your person. But that job market wasn't very strong.英语博客空间(English Blogs-英语麦当劳)-kl6v7F ]1i*h.?6^3S

H%D�f w+K1R&a:kO0    So, I was planning to go to law school, not because it was a lifelong dream ?because I thought it was expected of me. Because I realized that I could never be the artist my mother was, so I would try to be the lawyer my father was. So, I went off to law school. For the first three months, I barely slept. I had a blinding headache every day. And I can tell you exactly which shower tile I was looking at in my parent's bathroom on a trip home when it hit me like a lightning bolt. This is my life. I can do what I want. I have control. I walked downstairs and said, "I quit."英语博客空间(English Blogs-英语麦当劳)t6z2dZ`0S bD

.h)KrB}O`"l0    I will give my parents credit in some ways. That was 1976. They could have said, "Oh well, you can get married." Instead, they said, "We're worried that you'll never amount to anything." It took me a while to prove them wrong. My first job was working for a brokerage firm. I had a title. It was not "VP." It was "receptionist." I answered phones, I typed, I filed. I did that for a year. And then, I went and lived in Italy, teaching English to Italian businessmen and their families. I discovered that I liked business. I liked the pragmatism of it; the pace of it. Even though it hadn't been my goal, I became a businessperson.英语博客空间(English Blogs-英语麦当劳)vZ2mn!u)P C5f\g+U6}
英语博客空间(English Blogs-英语麦当劳)0^vFj"~S{5A4Ys
    I like big challenges, and the career path I chose for myself at the beginning was in one of the most male-dominated professions in America. I went to work for AT&T. It didn't take me long to realize that there were many people there who didn't have my best interests at heart.英语博客空间(English Blogs-英语麦当劳)k+J-` y]Pvz0q

-yh [L#gu SJ0    I began my career as a first level sales person within AT&T's long lines department. Now, "long lines" is what we used to call the long distance business, but I used to refer to the management team at AT&T as the "42 longs" ?which was their suit size, and all those suits ?and faces ?looked the same.英语博客空间(English Blogs-英语麦当劳)b'Y-u#@8f,Hl;Z$r{&bz.t
英语博客空间(English Blogs-英语麦当劳)+{C5Ku?H G
    I'll never forget the first time my boss at the time introduced me to a client. With a straight face, he said "this is Carly Fiorina, our token bimbo." I laughed, I did my best to dazzle the client, and then I went to the boss when the meeting was over and said, "You will never do that to me again."英语博客空间(English Blogs-英语麦当劳)` ~&~u#E!Y*L&C lmoi4t

}$uEwG0    In those early days, I was put in a program at the time called the Management Development Program. It was sort of an accelerated up-or-out program, and I was thrown into the middle of a group of all male sales managers who had been there quite a long time, and they thought it was their job to show me a thing or two. A client was coming to town and we had decided that we were getting together for lunch to introduce me to this customer who was important to one of my accounts.
NG#h/a,K�p%l�O0
7d1q3]L%ir@@1O0    Now the day before this meeting was to occur, one of my male colleagues came to me and said, "You know, Carly, I'm really sorry. I know we've had this planned for a long time, but this customer has a favorite restaurant here in Washington, D.C., and they really want to go to that restaurant, and we need to do what the customer wants, and so I don't think you'll be able to join us."
4P[9J|7yD0英语博客空间(English Blogs-英语麦当劳)'k*?Y3k6\)Buh
    "Why is that?" I asked. Well, the restaurant was called the Board Room. Now, the Board Room back then was a restaurant on Vermont Avenue in Washington, D.C., and it was a strip club. In fact, it was famous because the young women who worked there would wear these completely see-through baby doll negligees, and they would dance on top of the tables while the patrons ate lunch.英语博客空间(English Blogs-英语麦当劳)$r)x"JN1j

j�F:AZ"qZh4DF0    The customer wanted to go there, and so my male colleagues were going there. So I thought about it for about two hours. I remember sitting in the ladies room thinking, "Oh God, what am I going to do? And finally I came back and said, "You know, I hope it won't make you too uncomfortable, but I think I'm going to come to lunch anyway."
JUf _Wh:folC0
lg8z_1alI.t0    Now, I have to tell you I was scared to death. So the morning arrived when I had to go to the Board Room and meet my client, and I chose my outfit carefully. I dressed in my most conservative suit. I carried a briefcase like a shield of honor. I got in a cab. When I told the taxi driver where I wanted to go he whipped around in his seat and said, "You're kidding right?" I think he thought I was a new act.英语博客空间(English Blogs-英语麦当劳) Ve ];]6t9[ B$?U^

(X{5y;bn4X0    In any event, I arrived, I got out, I took a deep breath, I straightened my bow tie, and went in the door - and you have to picture this - I go into the door, there's a long bar down one side, there's a stage right in front of me, and my colleagues are sitting way on the other side of the room. And there's a live act going on the stage. The only way I could get to them was to walk along that stage. I did. I looked like a complete idiot. I sat down, we had lunch.
8_'D9I+a6_7^/^L0
Ed;j$~p"k"?a2P Is u0    Now, there are two ends to that story. One is that my male colleagues never did that to me again. But the other end to the story, which I still find inspiring, is that all throughout lunch they kept trying to get those young women to dance in their negligees on top of our table -- and every one of those young women came over, looked the situation over and said, "Not until the lady leaves."
G{/K pwkI{0
JA[1q2T C0    It even followed me to HP. As you may know, the legend of HP is that it began in a garage. When I took over, we launched a get-back-to-basics campaign we called "the rules of the garage." A fellow CEO at a competitor saw that and decided to do a skit about me. In front of the entire financial analyst and media community, he had an actress come out with blond hair and long red nails and flashy clothes, and had a garage fall on her head. It made big headlines locally. It made me feel a lot like the "token bimbo" all over again.英语博客空间(English Blogs-英语麦当劳)|%X2|-LP6]i

zUc`CS2~*o0    I know all of you have your own stories. When you challenge other people's ideas of who or how you should be, they may try to diminish and disgrace you. It can happen in small ways in hidden places, or in big ways on a world stage. You can spend a lifetime resenting the tests, angry about the slights and the injustices. Or, you can rise above it. People's ideas and fears can make them small ?but they cannot make you small. People's prejudices can diminish them - but they cannot diminish you. Small-minded people can think they determine your worth. But only you can determine your worth.
,Y%G1`4hR ?JWB0英语博客空间(English Blogs-英语麦当劳)y�Al/wp gz/B.C J
    At every step along the way, your soul will be tested. Every test you pass will make you stronger. But let's not be naive. Sometimes, there are consequences to not selling your soul. Sometimes, there are consequences to staying true to what you believe. And sometimes, those consequences are very difficult. But as long as you understand the consequences and accept the consequences, you are not only stronger as a result, you're more at peace.英语博客空间(English Blogs-英语麦当劳)8Qwk0V�T
英语博客空间(English Blogs-英语麦当劳)8v2k*sq2p9DP
    Many people have asked me how I feel now that I've lost my job. The truth is, I'm proud of the life I've lived so far, and though I've made my share of mistakes, I have no regrets. The worst thing I could have imagined happened. I lost my job in the most public way possible, and the press had a field day with it all over the world. And guess what? I'm still here. I am at peace and my soul is intact. I could have given it away and the story would be different. But I heard the word of scrīpture in my head: "What benefit will it be to you if you gain the whole world, but lose your soul?"英语博客空间(English Blogs-英语麦当劳):zq"pk8N}`;y
英语博客空间(English Blogs-英语麦当劳)W;x WI�B'yd�BK'D
    When people have stereotypes of what you can't do, show them what you can do. When they have stereotypes of what you won't do, show them what you will do. Every time you pass these tests, you learn more about yourself. Every time you resist someone else's smaller notion of who you really are, you test your courage and your endurance. Each time you endure, and stay true to yourself, you become stronger and better.
p6a6|ly$QLU$|&T0英语博客空间(English Blogs-英语麦当劳)ul_Jx9Pu_5p
    I do not know any of you personally. But as a businessperson and a former CEO, I know that people who have learned to overcome much can achieve more than people who've never been tested. And I do know that this school has prepared you well. After all, North Carolina A&T graduates more African Americans with engineering degrees than any other school in the United States. It graduates more African American technology professionals than any other school. It graduates more African American women who go into careers in science, math, and technology than any other school. Your motto is right: North Carolina A&T is truly a national resource and a local treasure. And Aggie Pride is not just a slogan ?it's a hard-earned fact!英语博客空间(English Blogs-英语麦当劳)PA6?'q%e:@:i"Vw6w

:^�s(I-JAu r5^ z;M)sC0    Never sell your education short. And the fact that this school believed in you means you should never sell yourself short. What I have learned in 25 years of managing people is that everyone possesses more potential than they realize. Living life defined by your own sense of possibility, not by others notions of limitations, is the path to success.英语博客空间(English Blogs-英语麦当劳)*| J\,Gm+d

vi _FT,Y&kr0    Starting today, you are one of the most promising things America has to offer: you are an Aggie with a degree.
bhpO)w _0英语博客空间(English Blogs-英语麦当劳)N.q@2^0` _6^
    My hope is that you live life defined by your own sense of possibility, your own sense of worth, your own sense of your soul. Define yourself for yourself, not by how others are going to define you ?and then stick to it. Find your own internal compass. I use the term compass, because what does a compass do? When the winds are howling, and the storm raging, and the sky is so cloudy you have nothing to navigate by, a compass tells you where true North is. And I think when you are in a lonely situation, you have to rely on that compass. Who am I? What do I believe? Do I believe I am doing the right thing for the right reason in the best way that I can? Sometimes, that's all you have. And always, it will be enough.英语博客空间(English Blogs-英语麦当劳)w,t!\C C~0_'z
英语博客空间(English Blogs-英语麦当劳)4{T P,x mm R`
    Most people will judge you by what they see on the outside. Only you and God will know what's on the inside. But at the end of your life, if people ask you what your greatest accomplishment was, my guess is, it will be something that happened inside you, that no one else ever saw, something that had nothing to do with outside success, and everything to do with how you decide to live in the world.英语博客空间(English Blogs-英语麦当劳)*D7b?+Sx#@dzxa(a6xU

^X#h]2F�^ _2UzB0H`0    What you are today is God's gift to you. What you make of yourself is your gift to God. He is waiting for that gift right now. Make it something extraordinary.
h9K�DM6T;e"tw7K0

谢谢,校长。各位,早上好!我很高兴能够与Renick校长一起,欢迎大家参加第114届北卡农业技术州立大学毕业典礼。英语博客空间(English Blogs-英语麦当劳);K%J4uh![t,f

eK(|!qC){)p$rT [ J0    亲爱的毕业生们,我很荣幸成为首批恭贺你们顺利完成学业的人之一。大家必须明白:随着母亲节礼物的远离,在未来的岁月里,等待你们的将是艰难坎坷的日子。英语博客空间(English Blogs-英语麦当劳)un'rw }O8~.I)\+j

(X0iuN�M:_*t0    毕业典礼演讲的目的是传播智慧。随着我年龄的增长,我越来越意识到,我从生活中学到的最重要的智慧来自我的父亲和母亲。在继续讲下去之前,先让我们再次聆听今天观众席中我们的父亲、母亲、长辈、家人和朋友的心声吧。
Siv)q'G:NT y0英语博客空间(English Blogs-英语麦当劳)T;w!g�~(Dw
    我初次收到来这里演讲的邀请时,还是一家在全球178个国家拥有11家分公司、145,000名员工、价值800亿美元的公司的CEO。在那个职位上我干 了近6年。然而,正如你们已经知道的,我目前已不再担任那一职务。在我离任的消息传开后,我给学校打电话,问道:你们是否仍希望我前来担任毕业典礼的演讲 人呢?Renick校长让我安心下来,他说:“卡莉,如果说和以前有什么不同的话,那就是你可能现在比以往与这些学生更相似。”他是对的。毕竟,我现在正 在准备自己的简历,罗列自己的介绍人,我买了一套新套装以备面试。如果这里有招聘人员在场的话,我大概11号就有空了。
Y7@4X%X,aR%w0
Ui*AA%j#M^0    无论如何,我要感谢大家听我的演讲,这是我离开惠普之后的首次公开露面。我非常希望来到这里,因为这个学校由于我所坚信的一些东西而显得与众不同,这些东西把我带回到我生命中最初的记忆中去。
_ WIP+heWz0英语博客空间(English Blogs-英语麦当劳){5hZ[$UOX
    记得有一天,在教堂,母亲给了我一个小盘子,上面有一条谚语。在我整个童年时期,我将那条谚语摆放在房间的小书桌上,今天还可以把那个盘子拿给你们看。上面写着:“你是什么由上帝的天赋注定,而你成为什么则是你献给上帝的礼物。”英语博客空间(English Blogs-英语麦当劳))e!f!M{oI

wP};q8]N0    这些话至尽仍然对我有着巨大的影响。这个学校与我同样深信的是,当我们思考自己的生命时,不应该受到其他人的陈词滥调或偏见好恶的限制;相反,我们应该坚 持自己对未来发展的判断,坚持自己对成就大业的把握,坚持对自己能有所作为的信念。Jesse Jackson的经历告诉我们,Ronald McNair的经历告诉我们,Greensboro Four的经历也告诉我们,注重发展性的人比注重局限性的人在生活中获得的要多得多。英语博客空间(English Blogs-英语麦当劳)-g}0f|V
英语博客空间(English Blogs-英语麦当劳)^Kk+F1d^"Q
    大家现在面对的问题是:如何定义自己成为什么样的人?对我而言,这实际上是两个问题:一个是人们从外表上看到的“你”,这是大多数人判断你的方式,因为那 是他们所能看到的全部,例如:你在生活中是什么人,是某个国家的总统,还是某个企业的CEO;但是,还有一部分的你是看不到的,这就是内在的“你”,是只 有自己和上帝才明白的人性本质。25年来,当人们向我询问职业生涯的意见时,我常常告诉他们,不要放弃你的内在本性,千万不要贩卖你的灵魂,因为没有人能 够支付得起。英语博客空间(English Blogs-英语麦当劳)'aG+x8i-KB8b}3P

yS,`r }x6}0    我所说的“不要贩卖自己的灵魂”,就是不要违背自己的本性,不要掩盖你的天赋,也不要放弃你的信念。无论结果看起来可能多么的可怕或糟糕,无论保持自己本性的结果是什么,总比出卖灵魂好很多。英语博客空间(English Blogs-英语麦当劳)z5k/m(_{7gbY?

:`S h9pI!z0    在到达今天之前,大家经历了无数的检验和测试,你们比我更清楚地知道:从你们离开校园的这一刻起,还要不断接受测试。接受这些测试的原因,是你们或许不适 合某些人对你们应该做什么工作、成为什么人的预想或模式化的观念。人们对于你们能做什么不能做什么、应该做什么不应该做什么有着模式化的概念,但是,只有 当你们愿意让他们影响你们时,他们才能影响你们,只有当你们愿意他们控制你们时,当你们放弃自己的内在本性时,他们才能控制你们。
2\8Ou\ P-x F o;F c0b0英语博客空间(English Blogs-英语麦当劳) Tlpn;L^/a/]�c1U/g%X
    我的这些感想来自自己的经验。在毕业离校的那一天,我曾经很害怕,担心别人会怎么想,担心我不符合要求,担心做出错误的选择,担心让辛辛苦苦工作供我念大学的人失望。
6h D\�|V5ye/V#j6}t0英语博客空间(English Blogs-英语麦当劳)tBn8Hu
    我毕业时获得了中世纪历史和哲学专业的学位,如果你们有一份需要关于哥白尼或者12世界欧洲僧侣知识的职位,那就非我莫属了。然而这一职务市场并不太大。 我当时计划去读法学院,并非因为这是我一生的梦想,而是因为我相信别人期望我如此。既然我意识到永远成不了母亲那样的艺术家,那么至少我应该成为父亲那样 的律师。这样,我改行去读法律学院。在最初的三个月里,我几乎夜夜不成眠,每天头痛欲裂。至今我还能确切地告诉你,在一次回家时,在父母的浴室中,我正凝 视着哪一片檐瓦,一个念头像闪电一样击中了我。这是我的生活,我能做自己想做的事,一切由我掌控!我走下楼,对他们说:“我要退学。”英语博客空间(English Blogs-英语麦当劳)#M:xLdFy

0OKl;o$DFV6C5sS0    从某个方面说,我应该给我的父母颁发奖章。当时是1976年,他们很有可能会说:“啊,那么,你就结婚吧。”相反,他们说道:“我们担心你永远无所作 为。”我花了些时间说服他们。我的第一份工作是为一家经纪公司工作,当时的头衔不是“副总”,而是“接待员”。我接听电话、打字、整理文档,这份工作我干 了一年。此后,我去了意大利,为意大利商人和他们的家人教授英文。我发现我喜欢商业贸易,喜欢它的实用,它的速度。即使这不是我的目标,我还是成了一个商 人。英语博客空间(English Blogs-英语麦当劳)A]c5M I

!TCk|+^ ?@1Iy:b0    我喜欢挑战,一开始为自己选择的职业生涯,恰好是在美国最受男权控制的行业,——我进入AT&T,不久就意识到,这家企业中很多人,都不是我心底 感兴趣的人。我作为了一名AT&T长话部的一级销售员,开始了自己的职业生涯。现在,“长话”指的是长途电话业务,不过我当时用“42英寸”来形 容AT&T的管理团队,这是他们的西服号码,所有的西服——以及他们的脸——看起来也一样。英语博客空间(English Blogs-英语麦当劳)(Vws/RmU-Tq

Y~Bi6Q0KT}0    我永远忘不了第一次我的老板向客户介绍我时,板着脸说:“这是卡莉•费奥瑞娜,我们的这儿的小妞。”我笑着,尽力讨好客户,在会面结束后我找到老板,说道:“以后再也不许这样对我。”英语博客空间(English Blogs-英语麦当劳) ^4l,zJ-_/|

h+M [7n.q5J#}/A'P0    在工作初期,我参加了一个项目,当时称作“管理发展计划”。那是一种强化项目,我被中途扔进一堆已工作相当长时间的男性销售经理当中,他们认为应该给我点 颜色瞧瞧。当一位客户前来拜访时,我们本来决定一起吃午餐,趁此机会向这位对我的业务非常重要的客户介绍我。会面前一天,我的一位男同事对我说:“瞧,卡 莉,非常抱歉,我知道我们早已计划好了,但是这位客户在华盛顿特区有一家最中意的餐厅,他们非常希望去那家餐厅,因此我想你可能不能跟我们一起去了。”
2UJ;Q1y2fW8J+x0英语博客空间(English Blogs-英语麦当劳)R {)^uw
    “为什么这样?”我问道。那家餐厅叫做“董事会议室”,当时的“董事会议室”是位于华盛顿特区的拂蒙特大街上的一家餐厅,是一家脱衣舞夜总会。实际上,它 当时非常有名,因为那里工作的年轻女人都穿着完全透明的洋娃娃睡衣,当客人吃饭时还会在桌子上跳舞。客户要去那里,因此我的男同事也得去。我考虑了大约两 个小时,记得我坐在女厕所中,想:“噢,天哪,我怎么办呢?”最后我走回来,说道:“好吧,我希望不会让你们太不舒服,但是我想我无论如何都要一起去。”英语博客空间(English Blogs-英语麦当劳)ej,O0S*z}

^.I8t*Kn(BQ%L(l0    现在,我必须告诉你们,当时我害怕得要死。那天早上到了,我必须得去“董事会议室”会见我的客户,我认真地挑选了自己的服装,穿上自己最保守的套装,提着 一个类似荣誉保护罩的公文包。坐进出租车后,当我告诉司机我要去的地方时,他猛地转过座位,说:“你是在开玩笑吧?”我想他认为我是那家餐厅新雇员。
R.V8V)M!H0
6|O&x7Jv/|D,A0    不管怎样,我终于到了,下车后我长吁一口气,正了正我的领结,走进了大门。你们可以想象得出,我进门后见到,一边有一张长长的吧台,在我正前方有一个舞 台,我的同事们正坐在房间另一边,舞台上正有演出,我必须沿着舞台才能走向他们。我走了过去,我看起来完全像一个傻瓜,坐下后,我们开始进餐。
AJ:WIe0U0
MWcmS5p1C H%u0    现在,这个故事有两种结尾。一个是,我们的男同事们从此再也没有这样对过我;但是另一种结局是,令我至今为止仍感到欢欣鼓舞的是,整个午餐期间,他们不断 尝试让那些穿着透视睡衣的年轻女孩在我们的桌上跳舞。每一个女孩子都过来了,看着眼前的情形,说:“一直跳到这位女士离开。”英语博客空间(English Blogs-英语麦当劳)XVC W2M0m x(qG
    英语博客空间(English Blogs-英语麦当劳)4~GO4WV mj Q(S
    我知道,你们都有自己的故事。当你们挑战别人对自己应该做什么样的人、应该如何工作的观念时,他们可能试图贬低或侮辱你。这一切可能是发生在阴暗角落里的 小打小闹,也可能是在世界大舞台上的轰轰烈烈。你们可能会花上一辈子的时间来憎恨这些测试,为这些无礼和不公平的行为忿忿不平;或者,你们也能从中奋发起 来。人们的观念和恐惧可令他们渺小——但无法让你渺小;人们的偏见可以贬低他们——但无法贬低你。心胸狭隘的人以为他们能够决定你的价值,但是只有你自己 才能决定自己的价值。英语博客空间(English Blogs-英语麦当劳)*R R,F)?r

7]m;mg&|V6q0    在前进的每一步,你的灵魂将受到测试,而你通过的每一次测试都将令你更强大。然而,我们不能太天真。有时候,不出卖自己的灵魂会得到一些结果;有时候,坚 持信念保持本性会得到一些结果;而有时候,这些结果是非常痛苦的。但是,只要你理解这些结果并接受这些结果,你不仅会变得更强大,还会得到更大的心灵的平 和。
$yT5R�i-R7BU*}!s3z0
gH%W+dv3t7U0    许多人问我失去工作后我感觉怎样,事实是,我对于至今为止我的生活是十分骄傲的,虽然我也犯过错,我不后悔。这是我能想象的最糟糕的事情,我以一种最为公 开的形式失去了我的工作,全球媒体为此兴师动众。但是,猜猜怎样?我还在这儿,心平气和,我的灵魂未受到损伤。我也可能会气馁妥协,那样故事就会大不相同 了。但是我听从了铭刻于脑海的一段格言:“如果你获得了整个世界却丢失了自己的灵魂,一切又有什么益处呢?”
RJ3_c,@)twTf�B0英语博客空间(English Blogs-英语麦当劳)Y(N$E4] _ [
    当人们对于你不能做什么妄下断语时,让他们看看你究竟能做什么;当他们对于你不应该做什么指手画脚时,让他们看看你要怎么做。每一次你通过测试,你对自己 了解得就更多;每一次反击了别人对于你究竟是什么人的轻视,你的勇气和忍耐力就得到了测试;每一次你忍耐,并保持自己的本性,你就变得更强大更完美。
%E;{"Z�sq_6[?n�S0
1Z]DQ8FC!S'PC0    我不认识你们中的任何人,然而作为一个商人和以前的CEO,我知道那些克服了众多困难的人比那些从未接受测试的人能获得更多;我也深知,这家学校为你们做 好了充足的准备。毕竟,拥有北卡农业技术州立大学工程学位的美籍非裔毕业生比其他美国学校更多,从这里毕业的美籍非裔技术专家比其他学校多,从这里毕业后 进入科学、数学和技术职业领域的美籍非裔妇女也比其他学校多。你们的座右铭非常好:北卡农技是真正的国家资源和地方财富。“农学院的骄傲”不仅是一个口号 ——也是一个十分难得的事实。英语博客空间(English Blogs-英语麦当劳)G9P&j~n]$K{ @'B
英语博客空间(English Blogs-英语麦当劳)+QV%LY0Q;f
    不要贱价出卖你的教育。这家学校对你们的信任意味着你们不能轻易出卖你们自己。我从25年管理人的经验中学到,每个人所拥有潜能都比他们意识到的大。按照你自己对未来发展的设想去生活,而非按别人设置的局限,是通往成功的途径。
wr(U/H8`\F"D?0
K b4K }*V�L0    从今天开始,你们是美国所拥有的最有前途的财富:你们是拥有学位的农学院毕业生。我的希望是,你们能够按照自己对未来的设想、对自己价值的把握、对自己灵 魂的坚持来生活。按自己的想法而不是别人的设想确定自己的人生。然后,坚持下去。寻找你们自己内在的指南针,我使用了“指南针”这个词,指南针的作用是什 么呢?当寒风咆哮、暴雨倾盆、阴云密布而你又没有导航的工具时,指南针告诉你们正北的位置。我以为,当你们处于孤独无援的境地时,必须依赖这个指南针。我 是谁?我相信什么?我相信自己为着正确的目的、以尽可能最好的方式做着最好的事情吗?有时候,这就是你所有的一切。而通常,这些也就足够了。
g!lBB F*fQ0    
!D pY t%c6K"[0    大多数人凭外在的表现来判断你,只有你自己和上帝知道你的内心本性。但是,在你生命终结的时候,如果人们问你,你最大的成就是什么,我猜想,那应该是发生在你内心的某些体验,别人无法知晓,这些体验与外在的成功没有关系,却与你决定在这个世界里如何生活密切相关。英语博客空间(English Blogs-英语麦当劳) J"mzs-\d(b'y

'P'Q p�H7zaQg4L6n0    你们现在是什么是上帝天赋所致,你们能成为什么则是你献给上帝的礼物。此刻上帝正在等待着你们的礼物,准备一份非同寻常的礼物吧。

posted @ 2007-06-28 14:07 Steven.L 阅读(241) | 评论 (5)编辑 收藏
  2007年3月7日

 


blueski推荐 [2006-6-6]
出处:cppblog.com
作者:任我行
 

1 IDLE
1.1 IDLE是python创初人Guido van Rossum使用python and Tkinter来创建的一个集成开发环境。要使用IDLE必须安装python and Tkinter。
1.2 特性:自动缩进,彩色编码,命令历史(Alt+p,Alt+n)和单词自动(Alt+/)完成。
1.3 用IDLE执行Tkinter程序,不要在程序中包括mainloop。IDLE本身就是Tkinter应用程序,它会自动调用mainloop。再调用一次mainloop会与IDLE的事件循环冲突,造成运行时错误。

2 BlackAdder
2.1 BlackAdder支持windows and linux环境。用它创建的程序可在任何一种平台上运行,负责维护它的是TheKompany.com。他们发布了该软件的个人版,只提供有限的支持;以及专业版,需要许可,面向商业软件开发者。详情请访问www.thekompany.com/products/blackadder。

3 PythonWorks
3.1 它由SecretLabs公司发布,该公司致力于Python项目的开发与部署提供相应的工具。PythonWorks是一种“快速应用程序开发”(RAD)工具,程序员可借助它快速地创建、调试和发布程序。
3.2 PythonWorks包括一个HTML/XML编辑器、具有完全索引的文档、一个源码管理系统(用于项目分组)、自定义的代码编辑特性以及一个GUI布局编辑器。支持jython。
3.3 允许用户以多种形式对项目进行打包:源码形式、可执行程序形式以及.pyc形式。
3.4 有版权,需购买,详情请访问www.pythonware.com/products/works/index.htm

4 Wing IDE
4.1 Wing IDE由Archaeopteryx Software公司开发与支持,适用于windows and linux环境。它提供一个源码分析器和浏览器、项目管理能力以及文本编辑器和调试器。
4.2 它由python编写,并包含python源码。购买者可自定义源码,以适应自已的要求,但是,不可将修改过的代码用于赢利目的。
4.3 全功能演示版可在archaeopteryx.com/wingide下载。

5 Pythonwin
5.1 Pythonwin集成开发环境包含在由ActiveState出品的ActivePython中,ActivePython是一个二进制build。其中包括用于XML处理的expat模块,以及一系列windows工具。
5.2 提供的特性有:彩色编码、源代码折叠、单词完成及自动缩进。调试器支持事后诊断功能、标准的单步调试、断点设计及变量监视。
5.3 详情请访问aspn.activestate.com/activepython。

6 Komodo
6.1 ActiveState还为python提供了另一个IDE,名为Komodo,可用它在windows and linux上开发程序。Komodo最大的特点是,它是Perl,PHP,Tcl,HTML,XML AND XSLT的一种集成开发环境。

7 Boa Constructor
7.1 Boa是一个跨平台的python IDE和WxPython GUI。它提供可视化的编程和操作框架,能方便地进行程序的设计。它有一个对象浏览器,并提供有各种资源的视图,有一个html文档生成器,还有一个先进的调试器和完整的帮助系统。Boa还提供对zope的支持,能添加、删除、复制、剪切、导入和导出zope中的对象。能编辑对象属性和进行python脚本的调试。Boa是用python基于WxPython库编写的。 用起来就象vb或delphi一样方便。
7.2 下载地址是:http://boa-constructor.sourceforge.net/,要安装Boa要先安装合适版本的python和WxPython。

在windows平台我就是用pythonwin,感觉还不错,和idle差不多,在windows平台的可考虑用它。
Python 集成開發環境

Take a look at PythonEditors if you don't want IntegratedDevelopmentEnvironments.
(!)Please keep wiki links as wiki links, use external links only if there is no existing page for the IDE.
Name
Platform
Notes
Unix + GNOME
Cross-language IDE; syntax coloring & folding for Python.
Windows, Linux x86
Commercial IDE for Python, support Webware and Python Unit. (not yet available for sale)
Windows/Linux
Commercial with all the features of IDLE, support for Ruby, and Qt GUI editor.
Python + wxPython
RAD GUI building IDE, similar to Delphi.
Linux x86
Commercial IDE with support to 30 other languages.
Unix
Commercial cross-language IDE; nice multi-user project manager.
Python + wxPython
Simple, clean editing environment for Python intended primarily for use in schools.
Java + SWT
See EclipsePythonIntegration for Python support.
Python + PyQt + QScintilla
Popular python IDE with interfaces to Qt Designer, Qt Linguist, unittest.
PyGTK
A GUI designer for (Py)GTK, similar to Glade.
Python + Tkinter + Tix
An extended version of IDLE using Tix.
Python + Tkinter
Part of Python distribution.
Python + Tkinter
An experimental fork of IDLE. Since, Python 2.3, IDLEfork has become the new "main" Idle.
Java 1.4+ VM
Popular multi-language IDE.
Unix + KDE
Cross-language IDE for KDE - supports Python syntax/projects.
Windows/Linux
Commercial multi-language and cross-platform IDE. Includes a GUI Builder.
Java
A Java IDE with an optional plugin for Jython.
Any (with Python + GTK)
Python IDE (code browser, debugger, profiler) which uses Vim as its editor.
Windows
A nice alternate Python IDE for Windows (debugger included), also ...providing a strong scripting solution for Delphi Applications.
Python + wxPython
RAD GUI building IDE
Windows
Available either as part of ActiveState's ActivePython distribution (which is not open source) or as part of the Win32All extensions from Mark's pages (which is open source).
Windows/Linux
(no longer being developed) SecretLabs' commercial IDE. Includes Tk layout editor.
Unix/Windows with Tcl/Tk
Cross-language IDE & Source code analysis tool.
Windows, Linux, MacOsX, FreeBSD, etc.
SPE is an open-source, multi-platform python IDE with [WWW]wxPython interface. It has auto indentation & completion, call tips, syntax coloring & highlighting, uml viewer, class explorer, source index, auto todo list, sticky notes, pycrust shell, file browsers, drag&drop, context help, [WWW]Blender support, ... Spe ships with [WWW]rpdb2 (remote encrypted debugger), [WWW]wxGlade (gui designer), [WWW]PyChecker (source code doctor) and [WWW]Kiki (regex console). Note: SPE has a Windows install binary, all other platforms must work with the source code - although donations are currently being amassed to create an OS X version.
Linux/Windows/Mac
Python and PHP IDE - open source project and a foundation for development tools for scripting languages built on top of Eclipse Platform
Linux/Windows/Mac
Advanced Python and PHP IDE - built on top of TruStudio Foundation and introducing many exceptional features
Windows 2000/XP with Visual Studio.NET
(commercial) A Python plug-in for Visual Studio.NET (requires ActivePython or Win32all)
Windows
GUI designer for wxPython.
Windows/Linux/Mac OS X/Unix
Commercial Python IDE with networked debugger, source browser, and syntax coloring/auto-completing editor. Free license for non-commercial open-source developers with an established project.
Unix/Windows/Mac
Non-free Cross-language GUI dialog designer with integrated support for editing your Python callback functions.
Unix/Windows/Mac
A "designer" for WxPython (requires wxPython)
External collections:
posted @ 2007-03-07 12:24 Steven.L 阅读(373) | 评论 (0)编辑 收藏

 

作者: ,  出处:IT专家网社区, 责任编辑: 叶江, 
2006-04-24 09:16
  最近Ruby On Rails(ROR)的火热程度真的让人很惊讶,《程序员》也用了大量的篇幅来介绍这个新兴的Web Application快速开发框架。对新鲜东西向来都很好奇的我却对ROR提不起兴趣,也许是因为Ruby由日本人创造的缘故吧,我对Ruby一直有着抗拒感,尽管ROR是丹麦的小伙子David开发的。

  最近Ruby On Rails(ROR)的火热程度真的让人很惊讶,《程序员》也用了大量的篇幅来介绍这个新兴的Web Application快速开发框架。对新鲜东西向来都很好奇的我却对ROR提不起兴趣,也许是因为Ruby由日本人创造的缘故吧,我对Ruby一直有着抗拒感,尽管ROR是丹麦的小伙子David开发的。

  抗拒归抗拒,ROR的成功着实是一种促使我去思考的动力。最简单的,Ruby与Python有着无比紧密的联系,那么在Python下有没有类似ROR的开发框架呢?答案是有,而且还非常的多!大家可以从两个site中找到很多很多的选择:WebProgramming和Web Development with Python。在这让人眼花缭乱的框架中,Zope是最为有名的,但是利用它来做开发却不见得高效,而且Zope所充当的角色更像是一个Application Server,与ROR所关注的范畴并不是很吻合;接下来就是CherryPy、Karrigell、TurboGears和Django了。对于CherryPy的了解其实是来源于TurboGears,因为TurboGears是Python世界中直接与ROR对话的框架,它是ROR的竞争者,因此最早进入了我的视野,大家可以看到ROR与TurboGears同时出现在了这条新闻中:TurboGears: Python on Rails? 。它最大的特点是并没有reinvent the wheel,而是充分利用了现有的优秀框架,提供了从前端至后端的解决方案,而CherryPy正是TurboGears的组成部分之一。Django也是ROR的竞争者,不过它还处于beta阶段,官方版本至今还没有发布,但是它已经受到了广泛重视,而国内的Python大牛limodou也更看好Django,认为它会比TurboGears做得更好。推荐Karrigell也是受到了limodou的影响,他对Karrigell也是宠爱有加,大家可以浏览他的blog,里面有一篇文章说明了他选择Karrigell的理由。

  说了半天,面对那么多的选择,大家是不是有些厌烦了呢?是的,我一开始见到这样的一个列表的时候,我也有点蒙了。我开始明白ROR的成功或许不仅因为它本身的强大,而是众人拾柴火焰高啊!Web Programming Framework在Python世界里所面临的困窘丝毫不亚于纷扰的J2EE世界。由于对这些框架了解还不多,我无法为大家作出Professional的推荐,只能够说说自己的想法了。

  在这众多框架中,我真正尝试过的只有CherryPy,它真的很小巧,而功能一点都不差。小小一百多K的体积竟然还包含了一个Http Server,所完成的应用程序可以放到一个.py文件中,部署起来会非常的方便,如果仅仅是开发一个小型网站,CherryPy是一个不错的选择。大家可以从IBM网站上的CherryPy for CGI programmers这篇文章中获得一些对CherryPy的感性认识。从中你会很惊喜的发现,代码量竟然是如此之少!由于CherryPy简单而不失强大,更重要的,它是TurboGears的重要组成部分,因此从CherryPy开始了解Python的Web Programming确实可以作为千里之行的第一步啊!

  在利用这些框架来开发Web应用程序,你会发现Template是一个十分重要概念。Template就是MVC中的View一样,定义了应用程序的表现层。因此要开发一个实用的Web应用程序,成熟易用的Template系统是必不可少的,在TurboGears中,Kid就是这样的一个Template System。同时,Karrigell框架中Template系统对中文的支持是最好的,更加重要的是你可以从limodou的blog上找到丰富的参考资料。因此,你需要做更规模稍大一点的网站的时候,不妨考虑一下Karrigell了。BTW:limodou兄是一个热心的人,呵呵~~~

  以上四个列举出来的框架就差Django还没有细说了,对于它我还真的不知道该说些什么了,大家还是看看Python wiki上对它的介绍吧。而且,limodou兄也是对它倍加推崇的。最后不得不提一下一种现在还没有出现也许在不久的将来会出现的Web开发方式——利用IronPython来开发ASP.NET!这种方式会在什么时候出现,它的影响将会有多大我们不得而知。但是这确实值得期待,我相信这样的开发方式会提高ASP.NET的开发效率。

  以前学习Python还是停留在一个纯粹的学习阶段,而现在有了ROR的刺激,我想对于Python的关注也将转移到Web Programming上了。我相信这样的一个学习实践过程是很有价值的,毕竟我学习.NET,学习J2EE,学习Portal,都是围绕着Web Programming。偶是一个花心的人,喜欢去了解很多的东西,虽然都不深刻。其实,了解那么多就是为了能够拓宽自己的思维,从不同的开发方式中为各种问题寻求更好的solution,也就是T型发展的一个面了,至于某一点的深入就放到以后再说吧!吾好读书,不求甚解也,呵呵~~~

  让我们都来关注Python在Web Programming的发展吧!欢迎各位与我一起讨论Web Programming with Python!

  [后记] 这只是一篇介绍性的文字,以“吹响反击Ruby On Rails的号角”似乎有点名不副其实了。虽然我在文中提到我对Ruby有些抗拒,但是我也深信对于技术不该有偏见。因此,我也会关注ROR的发展,毕竟它获得了广大开发人员的认可,忽视它可是不明智的!当然,我还是希望Python能够在这场竞争中迎头赶上,最终胜出。:)

posted @ 2007-03-07 09:52 Steven.L 阅读(285) | 评论 (0)编辑 收藏
作者: 出处:csdn  ( 0 ) 砖  ( 0 ) 好  评论 ( 0 ) 条 进入论坛
更新时间: 2006-10-17 18:05
关 键 词: Ruby  Python  比较
阅读提示:本文作者对属于快速开发语言的Ruby和Python做了一些简单的比较。作者认为,如果是非专业人员初尝开发,Ruby是合适的。对于专业的程序员,还是建议选择Python。

最近,我需要一种快速开发语言,目前炙手可热的快速开发语言就是Python和Ruby了。Ruby和Python都是非常优秀的脚本语言,虽然他们的设计哲学几乎完全不同,但他们效率差不多,应用领域也差距不大,似乎天生就是竞争对手。到底选那个呢?我做了一些简单的比较。

我们比较两种语言的时候,抛开性能问题不说,一般最在意的大概就是资源和学习曲线。

总体的印象,用一个不大恰当的比喻:如果Python是Java,那么Ruby就是.net。我们知道,Java世界非常复杂,非常多样性,任何一个需求,都会有很多开源项目,他们用不同的思想来实现,性能特点迥异,到底选那个,总是令人犯难。现在Python也是如此,而由于Python开发难度远远低于Java,导致Python的相关项目比Java还要多得多。

资源上,两者社区都很强,有趣的是,现在Java社区存在被Ruby同化的危险,至少我订阅的几个Java blog聚合中谈Ruby比Java还多。Ruby的社区较为集中,Python则比较分散。我总怀疑Ruby的日本用户较多,但因为不懂日文,很难确认这个想法。对于一个母语非英语的创始人,我总是有点恐惧,怕很难理解他,怕很难得到最新消息等等,虽然这个担心目前看来并无必要,不过,谁知道会怎么样呢!

Ruby之所以现在突然变得热门,和rails这套架构是分不开的。考虑Ruby,就要考虑到Ruby on rails。rails提供了一套非常好的web开发框架,开发效率非常高。Python虽然有很多类似的架构实现,但并没有出现一个能够一统江湖的架构。Python的zend虽然完整,但更偏向于web服务器,不能用来和rails比较。

Ruby比pyton更容易上手。从语言特征看,Ruby有很多有意思的创造,比如说block,但大规模的应用这些好玩的东西让程序变得混乱。Python语法强调简单,但是由于太灵活,简单得太过分,于是传统程序员经常会看到一些令人大吃一惊的表达方式。我不知道这应该算优点还是缺点,至少我认为语法过于灵活,容易导致不同程序员的代码风格差异过大,增加了学习成本。

初期入门,Ruby更容易,但一旦达到一定复杂度,那么Ruby的难度骤然加大。Python入门不容易,复杂的时候也不会太痛苦。rails有入门简单,深入难的问题。rails生成的目录是做什么用途?o/r mapping如何实现的?如何把数据从web中传递到数据库的。这些都是Ruby程序员早晚要面对的问题。Python则不会这样,如果搞不清楚这些,大概根本没办法开始。集成度太高的快速开发工具都有这个特点,无论是VB、Delphi,还是.net,有多少使用了半年以内的开发人员可以说清楚工程目录下面所有的文件的用途、每个文件中的语法?我相信很多很有经验的用户也未必说的清楚。

从架构上看,二者虽然实际上相差甚远,但最后表现出来的结果反而很相似。Ruby是纯粹的OO语言,而Python是函数和OO混合型。虽然Ruby也能用函数风格的编码方式,但实际上是模拟出来的。他们的这个差距对于普通的程序员影响并不大,毕竟看起来差不多。

总体来说,如果是非专业人员初尝开发,Ruby是合适的。对于专业的程序员,我还是建议选择Python。

对于未来发展,我认为Python的发展可预见,会较为平稳。Python已经属于一个社区,而非一个人,但Ruby由于种种原因,Ruby的作者maze的意志仍然会对Ruby的发展造成较大影响。Sun控制着Java,但由于sun的资源强大,且组织了jcp进行统筹,所以Java发展很不错,但Ruby能不能作到这一点,还需要时间来证明。

posted @ 2007-03-07 09:48 Steven.L 阅读(1565) | 评论 (0)编辑 收藏

学习有关构建具有最大灵活性的 Web 应用程序的 Python 标准

developerWorks
文档选项
将此页作为电子邮件发送

将此页作为电子邮件发送

未显示需要 JavaScript 的文档选项


拓展 Tomcat 应用

下载 IBM 开源 J2EE 应用服务器 WAS CE 新版本 V1.1


级别: 初级

Uche Ogbuji (uche@ogbuji.net), 首席顾问, Fourthougth, Inc.

2006 年 8 月 22 日

学习使用 Python 在 Web 服务器中创建并重用组件。Python 社区创建了 Web 服务器网关接口(Web Server Gateway Interface,WSGI),这是创建跨服务器和框架工作的 Python Web 组件的标准。它提供了一种利用许多不同的 Web 工具开发 Web 应用程序的方法。本文介绍了 WSGI 并展示如何开发出能够集成到设计出色的 Web 应用程序中的组件。

Web 成功的主要原因是它的灵活性。您会发现在设计、开发和部署 Web 站点和应用程序方面,每个开发人员几乎都有自己的特色。尽管有大量的选择,但是一个 Web 开发人员经常选择惟一的 Web 设计工具、页面风格、内容语言、Web 服务器、中间件和 DBMS 技术的组合,使用不同的实现语言和辅助工具包。为了给所有这些元素一起工作提供最大的灵活性,应该尽可能地通过组件提供 Web 的功能。这些组件应该执行有限数量的任务,并相互很好地配合工作。这么说很容易,但是在实践中完成这一要求是非常困难的,因为有许多实现 Web 技术的不同方法。

因此开发人员期望着 Web 组件协同工作标准的成熟。这些重要标准的一部分已经开发完成,而且最成功的 Web 开发平台已经成为它们的支柱。突出的例子包括 Java servlet API 和 Ruby on Rails 框架。一些长期流行的 Web 编程语言直到最近才提供了相同的组件化水平,而且借鉴了先前 Web 框架组件标准的经验。一个例子是 Zend Framework for PHP(参见 参考资料)。另一个例子是 Python 的 Web 服务器网关接口(WSGI)。

许多人抱怨流行的 Python 编程语言有太多的 Web 框架,从众所周知的 entrant(比如 Zope)到 under-the-radar 框架(比如 SkunkWeb)。有些人认为只要有一些基础标准化了,这种差异可能是件好事。Python 和 Web 专家 Phillip J. Eby 从事这样的标准化工作。他撰写的 Python Enhancement Proposal(PEP)333 定义了 WSGI。

WSGI 的目标是支持 Python 框架之间更大的协同工作能力。WSGI 的成功会产生一个插件组件生态系统,在这个系统中可以用您喜欢的框架获得最大的灵活性。在本文中,我将介绍 WSGI,主要关注它作为可重用 Web 组件架构的使用方法。在所有讨论和示例代码中,假设您正在使用 Python 2.4 或者更新的版本。

WSGI 的基本架构

WSGI 是在相当严格的约束条件下开发的,但是最重要的是需要对先于它的 Web 框架的向下兼容性。很遗憾,这个约束意味着 WSGI 不能像 Python 开发人员习惯的那么简洁和透明。通常,必须直接处理 WSGI 的开发人员只有那些需要构建框架和可重用组件的开发人员。大多数普通的 Web 开发人员会挑选容易使用的框架,而不接触 WSGI 的细节。

如果想开发可重用 Web 组件,就必须理解 WSGI。需要理解的第一件事是以 WSGI 的角度来看 Web 应用程序是如何构造的。图 1 说明了这个结构。


图 1. HTTP 请求 — 响应如何通过 WSGI 堆栈
WSGI 堆栈

Web 服务器(也称为网关)是与请求客户机(通常是用户的浏览器)进行基本通信的非常低级的代码。应用层处理较高级别的细节,解释来自用户的请求并准备响应的内容。WSGI 本身的应用程序接口通常只是应用程序框架的更高层的最基本层,为通用的 Web 模式(比如 Ajax 技术或者内容模板系统)提供友好的设施。在服务器或者网关层之上是 WSGI 中间件。这个重要的层包含在服务器和应用程序实现中可以共享的组件。通用 Web 特性(比如用户会话、错误处理和身份验证)可以作为 WSGI 中间件来实现。

中间的代码

WSGI 中间件对于可重用组件是最自然的层。WSGI 中间件看上去对于应用程序是较低层,而对于服务器是较高层。为了添加一些特殊的特性,它监视请求、响应和 WSGI 环境的状态。遗憾的是,WSGI 规范提供了非常差的中间件例子,而且可以找到的大多数其他例子也很简单,只能提供如何快速编写中间件的感性认识。我将使用以下概述给出对 WSGI 中间件承担的过程的感性认识。这里忽略了大多数 WSGI 中间件作者都不必担心的问题。在 Python 中,我使用单词函数,意思是任何可调用的对象。

  • 设置阶段。每当 Web 服务器启动时,设置阶段就发生了。它接受一个中间件实例,其中包括应用程序函数。
  • 处理客户机请求。每当 Web 服务器收到请求时,就会处理客户机请求。
    1. 服务器用这个环境和 server.start_response 参数调用中间件函数。
    2. 中间件处理这个环境并调用可调用的应用程序,传递这个环境和包装的函数 middleware.start_response
    3. 应用程序执行;首先它准备响应报头,然后调用 middleware.start_response
    4. 中间件处理响应报头并调用 server.start_response
    5. 服务器将控制传递回中间件,然后回到开始产生响应体块(比如字符串)的应用程序。
    6. 对于每一个响应,体块中间件做出任何修改并向服务器传递一些相应的字符串。
    7. 一旦处理完应用程序的所有块,中间件就向服务器返回控制,完成当前的请求。




回页首


处理 XHTML 的大胆步骤

许多组件技术相当复杂,所以作为指导的例子最好是简单的东西。这不是使用 WSGI 的案例,事实上,我将要介绍一个非常实际的例子。许多开发者更喜欢使用 XHTML Web 页面,因为 XML 技术比 “标记汤” 的 HTML 更容易管理,而且 Web 站点倾向于更容易由机器读取。问题是并非所有的 Web 浏览器都能正确地支持 XHTML。清单 1(safexhtml.py)是一个 WSGI 中间件模块,它检查到来的请求,看浏览器是否支持 XHTML;如果不支持,就将任何 XHTML 响应翻译成普通的 HTML。可以使用这样的模块让所有主要应用程序代码产生 XHTML,而中间件负责任何需要翻译成 HTML 的地方。仔细查看 清单 1 并试着把它与前面描述的 WSGI 中间件过程相结合。我提供了足够的注释,您可以识别出代码的不同阶段。


清单 1(safexhtml.py). WSGI 中间件为不能处理 XHTML 的浏览器把 XHTML 翻译成 HTML
import cStringIO
from xml import sax
from Ft.Xml import CreateInputSource
from Ft.Xml.Sax import SaxPrinter
from Ft.Xml.Lib.HtmlPrinter import HtmlPrinter

XHTML_IMT = "application/xhtml+xml"
HTML_CONTENT_TYPE = 'text/html; charset=UTF-8'

class safexhtml(object):
    """
    Middleware that checks for XHTML capability in the client and translates
    XHTML to HTML if the client can't handle it
    """
    def __init__(self, app):
        #Set-up phase
        self.wrapped_app = app
        return

    def __call__(self, environ, start_response):
        #Handling a client request phase.
        #Called for each client request routed through this middleware

        #Does the client specifically say it supports XHTML?
        #Note saying it accepts */* or application/* will not be enough
        xhtml_ok = XHTML_IMT in environ.get('HTTP_ACCEPT', '')

        #Specialized start_response function for this middleware
        def start_response_wrapper(status, response_headers, exc_info=None):
            #Assume response is not XHTML; do not activate transformation
            environ['safexhtml.active'] = False
            #Check for response content type to see whether it is XHTML
            #That needs to be transformed
            for name, value in response_headers:
                #content-type value is a media type, defined as
                #media-type = type "/" subtype *( ";" parameter )
                if ( name.lower() == 'content-type'
                     and value.split(';')[0] == XHTML_IMT ):
                    #Strip content-length if present (needs to be
                    #recalculated by server)
                    #Also strip content-type, which will be replaced below
                    response_headers = [ (name, value)
                        for name, value in response_headers
                            if ( name.lower()
                                 not in ['content-length', 'content-type'])
                    ]
                    #Put in the updated content type
                    response_headers.append(('content-type', HTML_CONTENT_TYPE))
                    #Response is XHTML, so activate transformation
                    environ['safexhtml.active'] = True
                    break

            #We ignore the return value from start_response
            start_response(status, response_headers, exc_info)
            #Replace any write() callable with a dummy that gives an error
            #The idea is to refuse support for apps that use write()
            def dummy_write(data):
                raise RuntimeError('safexhtml does not support the deprecated 
                                       write() callable in WSGI clients')
            return dummy_write

        if xhtml_ok:
            #The client can handle XHTML, so nothing for this middleware to do
            #Notice that the original start_response function is passed
            #On, not this middleware's start_response_wrapper
            for data in self.wrapped_app(environ, start_response):
                yield data
        else:
            response_blocks = []  #Gather output strings for concatenation
            for data in self.wrapped_app(environ, start_response_wrapper):
                if environ['safexhtml.active']:
                    response_blocks.append(data)
                    yield '' #Obey buffering rules for WSGI
                else:
                    yield data

            if environ['safexhtml.active']:
                #Need to convert response from XHTML to HTML 
                xhtmlstr = ''.join(response_blocks) #First concatenate response

                #Now use 4Suite to transform XHTML to HTML
                htmlstr = cStringIO.StringIO()  #Will hold the HTML result
                parser = sax.make_parser(['Ft.Xml.Sax'])
                handler = SaxPrinter(HtmlPrinter(htmlstr, 'UTF-8'))
                parser.setContentHandler(handler)
                #Don't load the XHTML DTDs from the Internet
                parser.setFeature(sax.handler.feature_external_pes, False)
                parser.parse(CreateInputSource(xhtmlstr))
                yield htmlstr.getvalue()
                return




safexhtml 类是完整的中间件实现。每个实例都是一个可调用对象,因为这个类定义了专门的 __call__ 方法。向服务器传递类的实例,传递包装成初始化器 __init__ 的应用程序。如果把 safexhtml 链到另一个中间件,包装的应用程序可能也是另一个中间件实例。当中间件作为向服务器请求的结果被调用时,这个类首先检查客户机发送的 Accept 报头,看它是否包括正式的 XHTML 媒体类型。如果是这样的话(xhtml_ok 标志),那么发送 XHTML 就是安全的,中间件就不在请求中做任何有意义的事情。

当客户机不能处理 XHTML 的时候,这个类定义专门的嵌套函数 start_response_wrapper,这个函数的作用是检查来自应用程序的响应报头,看响应是否是 XHTML。如果是,这个响应需要翻译成普通的 HTML,在这个环境中以 safexhtml.active 标记这个事实。对于这个标志,使用这个环境的一个原因是因为它处理将标志返回到其余的中间件代码的范围问题。记住,在应用程序选择的时间异步调用 start_response_wrapper,它可以技巧地管理必要的中间件状态。

使用这个环境的另一个原因是向下沿着 WSGI 堆栈通信时,内容已经修改。如果需要翻译响应体,不仅要运行 start_response_wrapper 设置 safexhtml.active,而且它还把响应媒体类型改成 text/html 并删除任何 Content-Length 报头,因为翻译会改变响应体的长度,它必须向下游重新计算,这可能由服务器执行。

一旦应用程序开始发送响应体,如果需要翻译,它就把数据收集到 response_blocks 列表中。应用程序可能以块的形式发送响应,但是为了保持代码简单,它仅针对完整的 XHTML 输入运行翻译机制。可是,WSGI 规则规定应用程序每次产生块的时候,中间件必须向服务器传送一些东西。传递空字符串也是可以的,这就是它应该做的。一旦应用程序完成,它就固定响应体并通过翻译代码处理响应,然后用最后一个字符串产生完整的输出结果。

清单 2 (wsgireftest.py)是测试中间件的服务器代码。它使用包含非常简单的 WSGI 服务器的 wsgiref。这个模块将包括在 Python 2.5 标准库中。


清单 2(wsgireftest.py). 测试清单 1 的服务器代码
import sys
from wsgiref.simple_server import make_server
from safexhtml import safexhtml

XHTML = open('test.xhtml').read()
XHTML_IMT = "application/xhtml+xml"
HTML_IMT = "text/html"
PORT = 8000


def app(environ, start_response):
    print "using IMT", app.current_imt
    start_response('200 OK', [('Content-Type', app.current_imt)])
    #Swap the IMT used for response (alternate between XHTML_IMT and HTML_IMT)
    app.current_imt, app.other_imt = app.other_imt, app.current_imt
    return [XHTML]

app.current_imt=XHTML_IMT
app.other_imt=HTML_IMT

httpd = make_server('', PORT, safexhtml(app))
print 'Starting up HTTP server on port %i...'%PORT

# Respond to requests until process is killed
httpd.serve_forever()



清单 2 读取 清单 3(test.xhtml)给出的简单 XHTML 文件,并向它提供替代的媒体类型。对于第一次请求使用标准的 XHTML 媒体类型,对于第二次使用 HTML 媒体类型,第三次又使用 XHTML,如此循环。如果响应没有标成 XHTML,就保持响应不变,这个中间件功能留给读者作为练习。


清单 3(test.xhtml). 由清单 2 中的示例服务器使用的简单 XHTML 文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
  <head>
    <title>Virtual Library</title>
  </head>
  <body>
    <p>Moved to <a href="http://vlib.org/">vlib.org</a>.</p>
  </body>
</html>



如果运行 清单 2 并在理解 XHTML 的浏览器(比如 Firefox)以及不理解 XHTML 的浏览器(比如 Microsoft Internet Explorer)中观看,您应该能够看到这个中间件的效果。为了在每个浏览器中看到中间件操作对响应媒体类型的影响,要在一行中请求两次。使用 View Source 查看产生的响应体,使用 Page Info 特性查看报告的响应媒体类型。也可以使用命令行 HTTP 工具 cURL:用 curl -H 'Accept: application/xhtml+xml,text/html' http://localhost:8000/ 模拟理解 XHTML 的浏览器,用 curl -H 'Accept: text/html' http://localhost:8000/ 模拟不理解 XHTML 的浏览器,从而测试这个例子。如果想要看响应报头,在每一次调用 cURL 之后使用 -D <filename> 并检查给定的文件名。





回页首


结束语

现在您学习了 Python 的 WSGI 以及如何使用它实现可以插入任何 WSGI 服务器和应用程序链的中间件服务。很容易将本文的中间件例子链到进行缓存或者调试的中间件。所有这些都成为组件,因此可以快速地向项目中添加经过反复测试的特性,而不必考虑选择的 WSGI 实现是什么。

WSGI 是一个相当新的规范,但是兼容的服务器、中间件和工具很快出现,使得 Python Web 框架的前景非常光明。下一次您在 Python 中开发重大的 Web 项目时,一定要通过使用现有的 WSGI 组件来采用 WSGI,还可以考虑为自己或者为您的 Web 开发伙伴创建 WSGI 组件。

posted @ 2007-03-07 09:39 Steven.L 阅读(246) | 评论 (0)编辑 收藏
  2007年3月6日
 公司内部的应用有一个很重要的功能就是用户管理,看起来不是很复杂,但真正在做一个系统时,又是一个不得不考虑的问题,因为用户管理不仅涉及到用户的认证,还包括用户的权限维护、授权功能,真是个说大不大,说小还有点麻烦的事情。

我在考虑我们的系统时就遇到了这个问题:选择太多了。公司里现在用的标准认证方式就有两个,自开发的一套用户管理系统和AD,他们背后又各自有自己的ldap接口,还可以调用OID,此外我们自己还有其他软件中也用到自己的认证系统,我们也可以用。这样我们的java+spring+ibetis+tomcat就遇到了至少5个选择。集中方法各有优劣。
1。自开发的用户管理系统虽然是公司推荐标准方式,但只适用于weblogic和jboss,没有做tomcat版本。
2。AD认证虽然方便,但java系统使用AD确实又不方便。
3。直接调用ldap和oid虽然可用,但公司不推荐,而且比较繁琐
4。用我们自己软件的认证管理又缺乏扩展不易维护,无法和人事系统挂钩。
真真是花了一点脑筋。最后还是觉得AD的认证最方便,毕竟大家用的都是Windows和IE,如果能将密码存在系统里也算是SSO了一把。但在网上查来查去,只找到了Apache+tomcat+jk+mod_auth_sspi和mod_ntlm的方式,花了大半天的时间搭建环境尝试应用,最后sspi+apache调得通,tomcat+apache+jk调得通,但登录用户怎么也传不到tomcat上的应用中。

回到最初的状态,到tomcat的主页上终于发现tomcat上的应用可以通过使用jcifs库使用ntlm认证,真是豁然开朗。赶紧下载,按照jcifs的文档一步一步设置,非常简单,一个jar,一个filter设置,轻松搞定。不过还不知道这个模块的稳定性如何,不过对我们的小应用来说应该足够了。手里没有jboss和weblogic的环境,不知道jcifs是否可以用在这两个环境。

不知道有没有其他人使用这个工具,为什么在网上很少找得到呢?
posted @ 2007-03-06 17:14 Steven.L 阅读(2663) | 评论 (0)编辑 收藏
  2007年3月4日

 

在实现了apache上可以运行rails以及apache可以取得windows 域认证两项功能之后,就剩下一个问题,如何在rails程序中得到登陆的用户名.其实非常简单,单因为对rails和ruby的不了解,还是花了我至少4个小时来从网上和文档中查找.甚至在javaeye论坛中发贴询问,结果导致被设为隐藏贴,禁止发贴30天!搞得我莫名其妙,难道这个问题真的简单到被禁贴的程度?
幸运的是最终我在rails的参考文档中找到了答案.
在rails app中,可以在controller中使用
request.env["REMOTE_USER"]得到登陆的用户名,如果要得到需要加上域名的用户名,则在httpd.conf的配置文件中,就需把,SSPIOmitDomain 参数设为off,或者省略.我用作测试的controller如下:
class TestController << ApplicationController
  def index
    render :text=&gt; request.env["REMOTE_USER"]
  end
end.


到此为止,我发现我可以用ruby on rails做这么几件事了:
1.快速开发简单的应用,可以利用rails中相当不错的特性,比如mvc,ajax,rhtml等等(我认为taglib功能又弱又繁琐,学习它和学习ruby差不多了)
2.和公司内部的认证机制联系上了,用户在使用我的应用的时候,不需要再记住一个密码.在此基础上,权限管理就可以实现了.
3.试用了几个ide环境后,发现netbeans 6.0对ruby on rails的支持最好.因此我也有了一个ide环境.

我觉得基本上,在企业内部开发一个简单的,只需要几个页面和权限管理的小web应用上面的东西已经足够了. 问题就来了,我花了两个礼拜的时间学习ruby on rails,搭建环境尝试可行性,那么这套东西,是不是真的能为企业所用?和JAVA相比毕竟ruby
 太年轻了, 在企业内部充斥着java,偶尔点缀一些.net和perl的环境中,ruby能用么?

看了网上若干篇有关ruby的未来或者j2ee末日的文章,中文的,英文的.再加上我自己的感觉,想先谈谈我自己的看法.首先谈ruby的优点:
1.ruby on rails对开发者来讲,真的是方便.在J2ee中复杂的让人发狂的接口调用,类型转换,在这里都没有.我觉得应该归功于它的无类型特性吧。spring+ibatis中复杂的xml终于不见了,在一个简单的应用中增加一个表字段,spring+ibatis中要修改至少10个地方,比如pojo,xmls,form类,dao类,controller,jsp等等,而且每一处要修改的地方都很复杂,类型的匹配转换让人发疯。rails
 约定&gt;配置的结构让我也非常高兴,我们不用再花时间讨论如何建立project的文件夹,确定文件夹的名称,发布等等。还有其他很多的特性,都让开发人员很愉快(相对于java和j2ee来说)甚至他们依赖的环境也不是复杂而缓慢的weblogic,而是简单而有效的apache(指我最后确定的架构而言)。
  
 而对开发人员的种种便利,对用户和需求方也同时是一种便利,他们可以快速的看到开发的成果,及时调整他们的需求。这对于我现在面对的应用——需求简单、多样、规模小——非常的有意义。
2。比java低的多的学习曲线。我的开发人员,包括我在内都是经验不太丰富,因为我的本职是系统管理员,面对java世界中的概念,我不止一次有过绝望的心态从J2EE,EJB,JMS,ajax到各种各样的架构(我最终选择了spring+ibatis学习和应用),什么反射、注入机制、多线程技术、ORM,太多概念要理解,尽管有eclipse这样优秀的ide可以省下一些时间,但对我们这样需要一定的开发,又不是专业程序员的人来讲,作为第二专业太过庞大了。我试过python、perl,但他们缺少框架和ide的问题使我放弃。ruby不同,语言简单、框架简单,连使用ajax也那么简单,学习曲
线大大降低。我甚至认为这是不是一套专门给业余人员发明的东西。


但和一下的问题比起来,ruby on rails
 众多的优点仍然不能让我下决心正式使用它,尽管我已经花了2个礼拜的时间考察它。
最决定性的因素是就业,我需要为我的组员负责。现在java相关的职位浩如烟海,可是ruby的我现在还没看到几个。尤其是大公司的招聘中,没有几个提到ruby相关的。如果我让我的组员开始使用ruby去做应用,将java放在一边,一旦跳槽的时候他们怎么办?难道让他们一出去就当架构师和项目经理(不需要编程的那种),ruby毕竟是一门语言,我相信如果要做得好,一定也要花相当多的时间和经历。而且语言本身并不是学习的难点,相关的体系、架构、API、程序库的使用,这些才是程序员最花时间的地方。而在这些地方,ROR和java阵营除了部分理念相通,其他的能借鉴的地方实在不多。

其次,ruby毕竟太新,没有众多的厂商支持和开源资源可以用,尤其是
国内的。而java在这方面优势巨大,尽管java开源的东西大多数都是中看不中用,但毕竟比没有强。比如图表软件?ruby上除了一个可免费使用的chartdirector,谁能再找到类似javareport,jfreechart的东西?还有一个问题:ruby有未来么?除了时间,谁也无法回答。

企业内部现在都是java和。net的天下,一个新开发的程序,及时再小也难免和现有系统进行交互,比如认证系统,比如相关的信息共享,不可能都是用数据库的表操作,或者期望缥缈的SOA。而跨语言的rjs毕竟效率上和功能上都不能和已有的java应用相媲美。当然,我看到他们使用。net开发的应用和java交互时也一样是一筹莫展,但毕竟他们自成体系。而且及时我们采用了ror,我们还是有一堆的现有应用需要维护,需要更新。让我们的程序员们通晓java和ruby?不,这只能让他们什么也不精通?

所以说,不论从公司角度,还是从员工角度,使用ror的风险都太大。让我实在难以下定决心来使用它。

上面的这些,已经和install rails with apache没什么关系了。因为这两天一直在思考这个问题,所以写出一点心得,也算把思路理理清楚。

 

posted @ 2007-03-04 22:14 Steven.L 阅读(304) | 评论 (0)编辑 收藏
  2007年3月2日

Although there is too much articals in webwork to subscribe the process intall the rails and apache, but I feel difficult to find a usefull and full instructions which can lead me step by step to reach the end.So here is the artical.
 
1.install rails
   1)download instantrails from rails web http://www.rubyonrails.org/
   2)unzip it into a folder which has no blank  in the path.
   It is so easy, isn't it?
2.install apache2
   1.)If you want to use the fastcgi with rails, as far as I know , my recommandation is 2.0.* apache, because I found that rubyforapache is not available for 2.2*. so you can download it  from apache.org.
   2)install apache2, just follow the next button.
3.install rubyforapache
   Install this to use rails on the Apache.
   1)download rubyforapache in windows from rubyforge https://rubyforge.org/projects/rubyforapache/. You can choose the appropriate version  .May be the newer the better.
   2)Install it, carefully fill the path for ruby and apache. And you should have the adiministration privilege , or have the privilege to put the libfcgi.dll into the folder c:\windows\system32.The install program will put the *.so into apache/modules folder.
   3)config fcgi in apache, add the line below into httpd.conf
   LoadModule fastcgi_module modules/mod_fastcgi.so

<IfModule mod_fastcgi.c>
  AddHandler fastcgi-script .fcgi
</IfModule>

FastCgiConfig -restart-delay 120 -idle-timeout 150 -appConnTimeout 100 -init-start-delay 100 -startDelay 100

4.install mod_auth_sspi.so
   1)Download it from sourceforge. 
   2)unzip the zip file. Copy bin/mod_auth_sspi.so to apache/modules/
   3)modify httpd.conf .remember , change the the path into your own path.

LoadModule sspi_auth_module modules/mod_auth_sspi.so   #add

DocumentRoot "D:\tool\InstantRails\rails_apps"   #modify
AliasMatch ^/([^/]*)(.*) "D:\tool\InstantRails\rails_apps/$1/public$2" #add

#add

<Directory "D:\tool\InstantRails\rails_apps">
 AddHandler fastcgi-script .fcgi 
  Options ExecCGI FollowSymLinks
  AllowOverride all
  Allow from all
  Order allow,deny
 
  AuthName "My Intranet"
  AuthType SSPI
  SSPIAuth On
  SSPIAuthoritative On
  require valid-user
</Directory>

Ok, now all needed have been ready, so you can generate a new rails app in the folder "D:\tool\InstantRails\rails_apps". and modify the app's public/.htaccess and dispatch.fcgi.

.htaccess should be like this
AddHandler fastcgi-script .fcgi
AddHandler cgi-script .cgi
Options +FollowSymLinks +ExecCGI

RewriteEngine On

RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
#RewriteRule ^(.*)$ dispatch.cgi [QSA,L]
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L] #be carefull of this fcgi
RewriteBase /cookbook

ErrorDocument 500 "<h2>Application error</h2>Rails application failed to start properly"
 
and the dispatch.fcgi should have a head like
#!D:/tool/InstantRails/ruby/bin/ruby 
#it's should be your own ruby path.

Now, start the Apache ,   open the IE, try it.

posted @ 2007-03-02 15:07 Steven.L 阅读(389) | 评论 (0)编辑 收藏
仅列出标题  
<2017年12月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

常用链接

留言簿(1)

随笔分类(12)

随笔档案(8)

文章档案(1)

最新随笔

搜索

  •  

最新评论

阅读排行榜

评论排行榜