let people know if they are doing wrong
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Delta.pod
CommitLineData
8c57b129 1=head1 NAME
6c18e892 2
8c57b129 3Catalyst::Delta - Overview of changes between versions of Catalyst
4
5=head1 DESCRIPTION
6
46fff667 7This is an overview of the user-visible changes to Catalyst between major
8Catalyst releases.
9
10=head2 VERSION 5.90060+
11
12We changed the way we return body content (from response) to whatever
13Plack handler you are using (Starman, FastCGI, etc.) We no longer
14always use the streaming interface for the cases when the body is a
15simple scalar, object or filehandle like. In those cases we now just
16pass the simple response on to the plack handler. This might lead to
17some minor differences in how streaming is handled. For example, you
18might notice that streaming starts using chunked encoding when running
19on a server that supports that, or that previously missing headers
20(possible content-length) might appear suddenly correct. Also, if you
21are using middleware like L<Plack::Middleware::XSendfile> and are using
22a filehandle that sets a readable path, your server might now correctly
23handle the file (rather than as before where Catalyst would stream it
24very likely very slowly).
25
26In other words, some things might be meaninglessly different and some
27things that were broken codewise but worked because of Catalyst being
28incorrect might suddenly be really broken. The behavior is now more
29correct in that Catalyst plays better with features that Plack offers
30but if you are making heavy use of the streaming interface there could
31be some differences so you should test carefully (this is probably not
32the vast majority of people). In particular if you are developing
33using one server but deploying using a different one, differences in
34what those server do with streaming should be noted.
35
36We also now more carefully distingush the different between a body set
37to '' and a body that is undef. This might lead to situations where
38again you'll get a content-length were you didn't get one before or
39where a supporting server will start chunking output. If this is an
40issue you can apply the middleware L<Plack::Middleware::BufferedStreaming>
41or report specific problems to the dev team.
b31499bc 42
9b3b1b9c 43=head2 VERSION 5.9XXXX 'cataplack'
c20710a1 44
45The Catalyst::Engine sub-classes have all been removed and deprecated,
46to be replaced with Plack handlers.
47
48Plack is an implementation of the L<PSGI> specification, which is
49a standard interface between web servers and application frameworks.
50
51This should be no different for developers, and you should not have to
52migrate your applications unless you are using a custom engine already.
53
54This change benefits Catalyst significantly by reducing the amount of
55code inside the framework, and means that the framework gets upstream
56bug fixes in L<Plack>, and automatically gains support for any web server
57which a L<PSGI> compliant handler is written for.
58
59It also allows you more flexibility with your application, and allows
60the use of cross web framework 'middleware'.
61
62Developers are recommended to read L<Catalyst::Upgrading> for notes about
63upgrading, especially if you are using an unusual deployment method.
64
65Documentation for how to take advantage of L<PSGI> can be found in
66L<Catalyst::PSGI>, and information about deploying your application
67has been moved to L<Catalyst::Manual::Deployment>.
68
69=head3 Updated modules:
70
71A number of modules have been updated to pass their tests or not
72produce deprecation warnings with the latest version of Catalyst.
73It is recommended that you upgrade any of these that you are using
74after installing this version of Catalyst.
75
76These extensions are:
77
78=over
79
80=item L<Catalyst::Engine::HTTP::Prefork>
81
82This is now deprecated, see L<Catalyst::Upgrading>.
83
84=item L<Test::WWW::Mechanize::Catalyst>
85
86Has been updated to not produce deprecation warnings, upgrade recommended.
87
88=item Catalyst::ActionRole::ACL
89
90Has been updated to fix failing tests (although older versions still
91function perfectly with this version of Catalyst).
92
93=item Catalyst::Plugin::Session::Store::DBIC
94
95Has been updated to fix failing tests (although older versions still
96function perfectly with this version of Catalyst).
97
14eb7697 98=item Catalyst::Plugin::Authentication
99
100Has been updated to fix failing tests (although older versions still
101function perfectly with this version of Catalyst).
102
c20710a1 103=back
1fae8c61 104
105=head1 PREVIOUS VERSIONS
106
9b3b1b9c 107=head2 VERSION 5.8XXXX 'catamoose'
1fae8c61 108
109=head3 Deprecations
b31499bc 110
e88235ff 111Please see L<Catalyst::Upgrading> for a full description of how changes in the
112framework may affect your application.
113
114Below is a brief list of features which have been deprecated in this release:
115
796a8358 116=over
b31499bc 117
796a8358 118=item ::[MVC]:: style naming scheme has been deprecated and will warn
b31499bc 119
e88235ff 120=item NEXT is deprecated for all applications and components, use MRO::Compat
b31499bc 121
e88235ff 122=item Dispatcher methods which are an implementation detail made private, public versions now warn.
b31499bc 123
e88235ff 124=item MyApp->plugin method is deprecated, use L<Catalyst::Model::Adaptor> instead.
796a8358 125
0a3b8de0 126=item __PACKAGE__->mk_accessors() is supported for backward compatibility only, use Moose attributes instead in new code.
127
7df44a71 128=item Use of Catalyst::Base now warns
129
796a8358 130=back
131
1fae8c61 132=head3 New features
0a3b8de0 133
134=head3 Dispatcher
b31499bc 135
7df44a71 136=over
137
138=item Fix forwarding to Catalyst::Action objects.
139
140=item Add the dispatch_type method
141
142=back
b31499bc 143
0a3b8de0 144=head3 Restarter
b31499bc 145
6171ddd5 146The development server restarter has been improved to be compatible with
147immutable Moose classes, and also to optionally use
148L<B::Hooks::OP::Check::StashChange> to handle more complex application layouts
149correctly.
b31499bc 150
7df44a71 151=head3 $c->uri_for_action method.
b31499bc 152
7df44a71 153Give a private path to the Catalyst action you want to create a URI for.
6c18e892 154
0a3b8de0 155=head3 Logging
b31499bc 156
7df44a71 157Log levels have been made additive.
b31499bc 158
0a3b8de0 159=head3 L<Catalyst::Test>
160
161=over
162
163=item Change to use L<Sub::Exporter>.
164
0a3b8de0 165=item Support mocking multiple virtual hosts
166
167=item New methods like action_ok and action_redirect to write more compact tests
168
169=back
170
7df44a71 171=head3 Catalyst::Response
0a3b8de0 172
7df44a71 173=over
174
175=item *
176
177New print method which prints @data to the output stream, separated by $,.
178This lets you pass the response object to functions that want to write to an
179L<IO::Handle>.
180
181=item *
182
183Added code method as an alias for C<< $res->status >>
0a3b8de0 184
d5a6de01 185=back
186
1fae8c61 187=head3 Consequences of the Moose back end
b31499bc 188
796a8358 189=over
190
191=item *
192
7df44a71 193Components are fully compatible with Moose, and all Moose features, such as
194method modifiers, attributes, roles, BUILD and BUILDARGS methods are fully
195supported and may be used in components and applications.
196
197=item *
198
199Many reusable extensions which would previously have been plugins or base
200classes are better implemented as Moose roles.
201
202=item *
203
a0c37f08 204L<MooseX::MethodAttributes::Role::AttrContainer::Inheritable> is used to contain action
7df44a71 205attributes. This means that attributes are represented in the MOP, and
206decouples action creation from attributes.
796a8358 207
208=item *
209
0a3b8de0 210There is a reasonable API in Catalyst::Controller for working with
796a8358 211and registering actions, allowing a controller sub-class to replace
25f61108 212subroutine attributes for action declarations with an alternate
0a3b8de0 213syntax.
796a8358 214
215=item *
216
0a3b8de0 217Refactored capturing of $app from L<Catalyst::Controller> into
218L<Catalyst::Component::ApplicationAttribute> for easier reuse in other
7df44a71 219components.
220
221=item *
222
223Your application class is forced to become immutable at the end of compilation.
224
225=back
226
1fae8c61 227=head3 Bug fixes
7df44a71 228
229=over
230
231=item *
232
25f61108 233Don't ignore SIGCHLD while handling requests with the development server, so that
7df44a71 234system() and other ways of creating child processes work as expected.
235
236=item *
237
238Fixes for FastCGI when used with IIS 6.0
239
240=item *
241
242Fix a bug in uri_for which could cause it to generate paths with multiple
243slashes in them.
796a8358 244
245=item *
246
7df44a71 247Fix a bug in Catalyst::Stats, stopping garbage being inserted into
248the stats if a user calls begin => but no end
796a8358 249
250=back
251