Thông tin tài liệu
Prepared exclusively for Trieu Nguyen
What readers are saying about
Enterprise Recipes with Ruby and Rails
Enterprise Recipes with Ruby and Rails c
overs most of the tasks you
need to accomplish in the enterprise, including integration with other
systems, databases, and security measures. I wish I’d h ad this book
three y ears ago.
Ola Bini
JRuby Core Developer, ThoughtWorks Studios
This book is full of practical, relevant advice instead of theoretical
background or “Hello, World” samples. Once you move beyond the
basic skills of using Ruby and Rails, this is exactly w hat you need—
real-world recipes that you can put to use immediately. It’s like getting
condensed experience on paper, giving you a two-year head start on
those who have to acquire this knowledge by making their own mis-
takes.
Stefan Tilkov
CEO and Principal Consultant, innoQ
If you’re responsible for developing enterprise software, after reading
this book you’ll want to review all your projects to see where you can
save time and money with Ruby and Rails. Maik Schmidt shows us
once again that enterprise software doesn’t have to be “enterprisey. ”
Steve Vinoski
IEEE Internet Computing Columnist and Member of Technical
Staff, Verivue, Inc.
On exactly the right level, this book explains many interestin g
libraries and tools invaluable for enterprise developers. Even experi-
enced Ruby and Rails developers will find new information.
Thomas Baustert
Rails Book Author, b-simple.de
Prepared exclusively for Trieu Nguyen
Download at Boykma.Com
Enterpri se Rec i pes with Ruby and Rai l s
Maik Schmidt
The Pragmatic Bookshelf
Raleigh, North Carolina Dallas, Texas
Prepared exclusively for Trieu Nguyen
Download at Boykma.Com
Many of the designations used by manufacturers and sellers to distinguish their prod-
ucts are claimed as trademarks. Where those designations appear in this book, and The
Pragmatic Programmers, LLC w as aware of a trademark claim, the designations hav e
been printed in initial capital letters or i n all capitals. The Pragmatic Starter Kit, The
Pragmatic Programmer, Pragmatic Programming, Pragmatic Bookshelf and the linking g
device are trademarks of The Pragmatic Programmers, LLC.
Every precaution was taken in the preparation of this book. However, the publisher
assumes no responsibility for errors or omissions, or for da mages that may result from
the use of information (including program listings) contained herein.
Our Pragmatic courses, workshops, and other products can help you and your team
create better software and have more fun. For more information, as well as the latest
Pragmatic titles, plea se visit us at
http://www.pragprog.com
Copyright
©
2
008 Maik Schmidt.
All rights reserved.
No part of this publication may be reproduced, s tored in a retrieval system, or transmit-
ted, i n any form, or by any means, el ectronic, mechanical, photocopying, recording, or
otherwise, without the prior conse nt of the publisher.
Printed in the United States of America.
ISBN-10: 1-934356-23-9
ISBN-13: 978-1-934356-23-4
Printed on acid-free paper.
P1.0 printing, November 2008
Version: 2009-4-20
Prepared exclusively for Trieu Nguyen
Download at Boykma.Com
For my girls:
Mia, Henriette, and Caro.
Prepared exclusively for Trieu Nguyen
Download at Boykma.Com
Contents
Foreword 9
Acknowledgments 12
Preface 13
Part I—Security & E-commerce Recipes 20
1 Implement Enterprise-wide Security 21
1. Protect Information with Symmetric Ciphers . . . . . . 23
2. Protect Secrets with Asymmetric Ciphers . . . . . . . . 28
3. Verify Data Integrity wi th Signatures . . . . . . . . . . . 31
4. Generate Real Random Numbers . . . . . . . . . . . . . 35
5. Create Strong and Convenient Passwords . . . . . . . . 38
6. Store Passwords Securely . . . . . . . . . . . . . . . . . 44
7. Reanimate Good Old Basic Authentication . . . . . . . 48
8. Implement a Single Sign-on Sy stem with OpenID . . . 51
9. Authenticate with LDAP . . . . . . . . . . . . . . . . . . 58
2 Process E-commerce Payments 62
10. Charge Credit Cards with ActiveMerchant . . . . . . . . 64
11. Integrate ActiveMer chant with Rails . . . . . . . . . . . 70
12. Transfer Money w i th PayPal . . . . . . . . . . . . . . . . 78
Part II—Databases & XML Recipes 88
3 Get the Most Out of Databases 89
13. Execute S tored Procedures . . . . . . . . . . . . . . . . 91
14. Feed Rails Databases from the Outside . . . . . . . . . 98
15. Access Databases from Different Vendors Simultane-
o
usly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
16. Manage Data with Subversion . . . . . . . . . . . . . . . 110
Prepared exclusively for Trieu Nguyen
Download at Boykma.Com
CONTENTS 7
4 Tame File and Data Formats 116
17. Manipulate CSV with Ruby . . . . . . . . . . . . . . . . 118
18. Read and Write Fixed-Length Records . . . . . . . . . . 123
19. Harness JSON in Ruby . . . . . . . . . . . . . . . . . . . 130
20. Master Binary Data . . . . . . . . . . . . . . . . . . . . . 134
5 Process XML Documents the Ruby Way 140
21. XML Data Binding on Steroids . . . . . . . . . . . . . . 142
22. Use XML Files as Models . . . . . . . . . . . . . . . . . . 146
23. Handle Large XML Documents . . . . . . . . . . . . . . 154
24. High-Performance Parsing . . . . . . . . . . . . . . . . . 159
25. Work with HTML and Microformats . . . . . . . . . . . . 165
26. Build Plain-Vanilla XML Documents . . . . . . . . . . . 172
27. Build Arbitrary XML Documents . . . . . . . . . . . . . 174
Part III—Networking & Messaging Recipes 178
6 Perform Basic Networking Tasks with Ease 179
28. Harness the Power of Sockets . . . . . . . . . . . . . . . 180
29. Find Solutions Quickly with open-uri . . . . . . . . . . 186
30. Get the Most Out of HTTP . . . . . . . . . . . . . . . . . 190
31. Scrape Screens with WWW::Mechanize . . . . . . . . . 196
7 Use and Build Web Services 202
32. Publish Resources with REST . . . . . . . . . . . . . . . 203
33. Use RE ST Services . . . . . . . . . . . . . . . . . . . . . 211
34. Build Your Own SOAP Services . . . . . . . . . . . . . . 217
35. Use SOAP Services with WSDL . . . . . . . . . . . . . . 221
8 Talk to Message Brokers 224
36. Transfer Messages wit h Files . . . . . . . . . . . . . . . 226
37. Create a Messaging Infrastructure . . . . . . . . . . . . 233
38. Integrate with JMS . . . . . . . . . . . . . . . . . . . . . 242
39. Connect to Message Queues with ActiveMessaging . . . 248
Report erratum
this copy is (P1.0 printing, November 2008)
Prepared exclusively for Trieu Nguyen
Download at Boykma.Com
CONTENTS 8
Part IV—Integration & Administration Recipes 256
9 Speak Foreign Languages 257
40. Embed C and C++ . . . . . . . . . . . . . . . . . . . . . . 258
41. Mix Java and R uby Code . . . . . . . . . . . . . . . . . . 265
42. Use RMI Services . . . . . . . . . . . . . . . . . . . . . . 271
43. Mix R uby and .NET with IronRuby . . . . . . . . . . . . 275
10 Maintain and Administer Your Applications 284
44. Turn Your Code into Daemons and Services . . . . . . 286
45. Monitor Your Applications with Monit . . . . . . . . . . 295
46. Let god Take Care of Your System . . . . . . . . . . . . 301
47. Create Plug-ins for Common Tasks . . . . . . . . . . . . 306
48. Avoid Code Duplication with Generators . . . . . . . . . 311
11 Test the Easy Way 315
49. Improve Your Testing with RSpec . . . . . . . . . . . . . 316
50. Integrate RSpec with Rails . . . . . . . . . . . . . . . . . 323
51. Create Mock Objects with RSpec . . . . . . . . . . . . . 326
52. Prototype Services with Sinatr a . . . . . . . . . . . . . . 334
12 Get Documentation Nearly for Free 343
53. Generate Documentation Automatically . . . . . . . . . 345
54. Annotate Your Models Automatically . . . . . . . . . . . 352
55. Create Great Reports . . . . . . . . . . . . . . . . . . . . 356
Bibliography 365
Index 366
Report erratum
this copy is (P1.0 printing, November 2008)
Prepared exclusively for Trieu Nguyen
Download at Boykma.Com
Fore word
I’m glad someone finally wrote this book.
Let me explain. I’ve been bullish on Ruby in the enterprise for a long
time now, both with and without Rails. And, the company for which
I work, ThoughtWorks, has also been a strong advocate for enterprise
Rails. It happened for me shortly after I fully understood w hat sets Rails
apart from other web frameworks. At the time, the last thi ng I wanted
to see was another web framework, recently having completed a book
comparing the dizzying array of web frameworks in the Java space (the
now very outdated Art o f Java Web Development [
For03]). Once you’ve
s
pent that much time looking at frameworks, a new one is not high
on your list of priorities. But when Rails came along, I could tell that
it was completely different and that it had lots of compelling, obvious-
in-hindsight ideas embedded inside it. I remember thinking “Wow, this
is going to be a really cool thing when all the libraries catch up.” For
something to be “enterprise ready,” you have to have tons of libraries to
support all the interactions with the outside world and repositories of
reusable code, so I estimated at the time that it would take five or six
years for Ruby to even sit at t he table in the enterpri se world.
But I was wrong in two ways. First, I greatly underestimated the pas-
sion and fire in the Ruby community to roll up their sleeves and create
all the libraries needed to l et Rails play in any space it wants. The sec-
ond way I was wrong reflects the first: it’s just plain easier to write
stuff in Ruby. I was carrying all the prejudices from my experience with
other languages, where it takes a lot of work to write reusable libraries
of code. And the reason for that comes from what I call the “Lockdown
Experiment.”
Back in the mid-90s, an experiment started as a way to make average
developers more effective, because the demand continued (as it does
today) to outstrip the supply of good developers. If the software industry
can figure out a way to make mediocre developers productive, software
Prepared exclusively for Trieu Nguyen
Download at Boykma.Com
FOREWORD 10
development can expand to enterprise scales. Thus, we saw the rise of
languages like Visual Basic and Java and later C#. These languages
were specifically made less powerful than alternat i ves (like Smalltalk).
The goal of the Lockdown Experiment: make tools to keep average devel-
opers out of trouble while still being able t o write code. But then a cou-
ple of interesting things happened. First, creating restrict i ve tools and
languages didn’t really keep average developers out of trouble, because
average developers sometimes apply great ingenuity to coming up with
ridiculously complex solutions to problems. But while this didn’t really
make the average developers better, it put a serious governor on the
best developers. The whole industry seemed to be optimizing for the
wrong thing: safety at the expense of power, with the stated goal of
creating software faster. Yet, we didn’t produce software faster; we just
annoyed the best developers. The second ef fect was this new wave of
languages was so restrictive that they immediately had to start supple-
menting them to get real work done. For example, in the Java world, the
second version added a bunch of new features (like anonymous inner
classes), and eventually some limited metaprogramming was added to
Java via aspect-oriented programming.
The real underlying problem with lots of “enterprise languages” is one
that Stuart Halloway of Relevance software summed up brilliantly:
ceremony vs. essence. Lang uages that require you to jump th rough
hoops to achieve results are highly ceremonious, whereas languages
that make it easy to do sophisticated things are more essential. At the
end of the day, you have to solve problems. You want languages and
frameworks that lessen the distance from intent to result. Ceremoni-
ous languages sometimes make that distance quite far, requiring lots
of work that doesn’t really move your solution forward. More essential
languages get out of your way, making the distance from intent to result
shorter.
That comes back to the second reason I was wrong about the appear-
ance of libraries in Ruby: it’s just plain easier to write stuff in Ruby
because it’s a more essential language. And that’s where this book
really shines. It bri l l i antly illustrates both of my points. It shows how
mature the libraries are in Ruby for doing “enterprisey” stuff like secu-
rity, networking, reporting, and interoperability. And it does a great
job of showing how concise solutions to typical problems leverage the
combination of Ruby and Rails. If this book were wr i tten for a more
ceremonious language, it would be twice as thick! This book covers the
gamut of ways that Ruby and Rails fits into and complements enter-
Report erratum
this copy is (P1.0 printing, November 2008)
Prepared exclusively for Trieu Nguyen
Download at Boykma.Com
[...]... JRuby and IronRuby (a Ruby interpreter implemented in C#), respectively, and the whole community benefits from their efforts In addition, companies like Oracle have already developed applications using JRuby on Rails. 1 There’s so much you can do in the enterprise with Ruby and Rails, and this book will be your guide Who This Book Is For This book is for anyone, beginner to experienced in Ruby/ Rails, ... Conventions This is a book about Ruby and Rails, so it should come as no surprise that it contains many code examples But this is not an introductory book, and I assume you are familiar with Ruby s syntax and with Rails For example, I won’t explain Rails basics such as working with ActiveRecord or installing a RubyGem Most examples were written in Ruby, but in today’s enterprise environments you’ll still... more information), you’ll find a detailed list of all RubyGems currently installed on my machine Everything has been tested with Ruby 1.8.6 Online Resources The Pragmatic Programmers have set up a forum for Enterprise Recipes with Ruby and Rails readers to discuss the recipes, help each other with problems, expand on the solutions, and even write new recipes You can find the forum at http://forums.pragprog.com/forums/80/... interact with existing infrastructure like message queues, handle monitoring and administration via Ruby libraries, and even bridge to existing Java and NET code Ultimately, this book shows that Ruby is indeed a first-class citizen in the enterprise and will continue to grow in stature The characteristics that make Rails compelling also make other solutions in Ruby compelling Every time someone in an enterprise. .. generates real random numbers from atmospheric noise 8 http://en.wikipedia.org/wiki/Pseudorandom_number_generator 9 http://realrand.rubyforge.org/ 10 http://www.random.org/ Prepared exclusively for Trieu Nguyen Download at Boykma.Com 4 G ENERATE R EAL R ANDOM N UMBERS Joe Asks What About SecureRandom? Since Ruby 1.8.7, SecureRandom is part of the standard library It generates much better random numbers... standards, because testing and generating reports and documentation are a piece of cake with Ruby Prepared exclusively for Trieu Nguyen Download at Boykma.Com P REFACE And it’s getting even better every day, because some of the biggest IT companies spend a lot of money to create and enhance new Ruby platforms that better fit their needs Both Sun and Microsoft, for example, pay developers to build JRuby... their knowledge of Ruby/ Rails in their jobs (that is, “the enterprise ) and now needs some orientation and quick solutions to urgent problems Learning the basics and keywords of a new language is comparatively easy, and the biggest task is learning all the new libraries Enterprise programmers need to know how to parse XML files, how to execute stored procedures, and how to integrate with SOAP services... programs on the NET platform? Recipe 43, Mix Ruby and NET with IronRuby, on page 275 brings you up to speed All recipes start with a Problem section explaining the exact problem that will be solved They continue with an Ingredients section listing all libraries you need, and they have a Solution section that shows in detail how to solve the problem with Ruby An optional Discussion section follows that... highly appreciate the comments and suggestions sent by Joseph Grace, Eric Kramer, Robert McGuire, Tim Sullivan, and Andrew Timberlake I’d like to thank my family and friends for their patience and support: Mom, Dad, Yvonne, André, Christian, Agnieszka, AleX, Roland, and Greta Last but not least, I’d like to thank Mia for ignoring all my quirks, for being infinitely patient, and for constantly reminding... generated numbers are truly random): Random::RandomOrg: Random::FourmiLab: Random::EntropyPool: 202,222,43,186,55 121,115,208,181,221 46,218,53,191,254 In line 5, we iterate over the different services that are currently supported by realrand Then, we create the appropriate generator that will actually connect to the service, and finally in line 7, we call randbyte( ) to generate five random bytes 11 http://www.fourmilab.ch/hotbits/ . saying about
Enterprise Recipes with Ruby and Rails
Enterprise Recipes with Ruby and Rails c
overs most of the tasks you
need to accomplish in the enterprise, . been
tested with Ruby 1.8.6.
Online Resources
The Pragmatic Programmers have set up a forum for Enterprise Recipes
with Ruby and Rails readers to discuss the recipes,
Ngày đăng: 22/03/2014, 21:20
Xem thêm: Larger Cover Enterprise Recipes with Ruby and Rails pptx, Larger Cover Enterprise Recipes with Ruby and Rails pptx