fixed how upload info is added to parameters
[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
8f3c0676 12=head3 Catalyst::Log object autoflush on by default
13
14Starting in 5.90065, the Catalyst::Log object has 'autoflush' which is on
15by default. This causes all messages to be written to the log immediately
16instead of at the end of startup and then at the end of each request. In
17order to access the old behavior, you must now call:
18
19 $c->log->autoflush(0);
20
efa8265f 21=head3 Deprecate Catalyst::Utils::ensure_class_loaded
3dc04d08 22
23Going forward we recommend you use L<Module::Runtime>. In fact we will
24be converting all uses of L<Class::Load> to L<Module::Runtime>. We will
25also convert L<Catalyst::Utils\ensure_class_loaded> to be based on
26L<Module::Runtime> to allow some time for you to update code, however at
27some future point this method will be removed so you should stop
28using it now.
29
fb29a8be 30=head3 Support passing Body filehandles directly to your Plack server.
0fb94688 31
46fff667 32We changed the way we return body content (from response) to whatever
33Plack handler you are using (Starman, FastCGI, etc.) We no longer
34always use the streaming interface for the cases when the body is a
35simple scalar, object or filehandle like. In those cases we now just
36pass the simple response on to the plack handler. This might lead to
37some minor differences in how streaming is handled. For example, you
efa8265f 38might notice that streaming starts properly supporting chunked encoding when
46fff667 39on a server that supports that, or that previously missing headers
40(possible content-length) might appear suddenly correct. Also, if you
41are using middleware like L<Plack::Middleware::XSendfile> and are using
42a filehandle that sets a readable path, your server might now correctly
43handle the file (rather than as before where Catalyst would stream it
44very likely very slowly).
45
46In other words, some things might be meaninglessly different and some
47things that were broken codewise but worked because of Catalyst being
48incorrect might suddenly be really broken. The behavior is now more
49correct in that Catalyst plays better with features that Plack offers
50but if you are making heavy use of the streaming interface there could
51be some differences so you should test carefully (this is probably not
52the vast majority of people). In particular if you are developing
53using one server but deploying using a different one, differences in
54what those server do with streaming should be noted.
55
0fb94688 56Please see note below about changes to filehandle support and existing
efa8265f 57Plack middleware to aid in backwards compatibility.
0fb94688 58
59=head3 Distinguish between body null versus undef.
60
46fff667 61We also now more carefully distingush the different between a body set
62to '' and a body that is undef. This might lead to situations where
63again you'll get a content-length were you didn't get one before or
64where a supporting server will start chunking output. If this is an
65issue you can apply the middleware L<Plack::Middleware::BufferedStreaming>
66or report specific problems to the dev team.
b31499bc 67
0fb94688 68=head3 More Catalyst Middleware
69
70We have started migrating code in Catalyst to equivilent Plack
71Middleware when such exists and is correct to do so. For example we now use
72L<Plack::Middleware::ContentLength> to determine content length of a response
73when none is provided. This replaces similar code inlined with L<Catalyst>
74The main advantages to doing this is 1) more similar Catalyst core that is
75focused on the Catalyst special sauce, 2) Middleware is more broadly shared
76so we benefit from better collaboration with developers outside Catalyst, 3)
77In the future you'll be able to change or trim the middleware stack to get
78additional performance when you don't need all the checks and constraints.
79
efa8265f 80=head3 Deprecate Filehandle like objects that do read but not getline
8e098614 81
82We also deprecated setting the response body to an object that does 'read'
83but not 'getline'. If you are using a custom IO-Handle like object for
84response you should verify that 'getline' is supported in your interface.
e27f6633 85Unless we here this case is a major issue for people, we will be removing support
0fb94688 86in a near future release of Catalyst. When the code encounters this it
87will issue a warning. You also may run into this issue with L<MogileFS::Client>
88which does read but not getline. For now we will just warn when encountering
89such an object and fallback to the previous behavior (where L<Catalyst::Engine>
90itself unrolls the filehandle and performs blocking streams). However
efa8265f 91this backwards compatibility will be removed in an upcoming release so you should either
0fb94688 92rewrite your custom filehandle objects to support getline or start using the
93middleware that adapts read for getline L<Plack::Middleware::AdaptFilehandleRead>.
94
efa8265f 95=head3 Response->headers become read-only after finalizing
8a3dcb98 96
97Once the response headers are finalized, trying to change them is not allowed
98(in the past you could change them and this would lead to unexpected results).
99
efa8265f 100=head3 Officially deprecate L<Catalyst::Engine::PSGI>
8e098614 101
102L<Catalyst::Engine::PSGI> is also officially no longer supported. We will
efa8265f 103no long run test cases against this and can remove backwards compatibility code for it
104as deemed necessary for the evolution of the platform. You should simply
105discontinue use of this engine, as L<Catalyst> has been PSGI at the core for
106several years.
aa20e9f5 107
efa8265f 108=head3 Officially deprecate finding the PSGI $env anyplace other than Request
0fb94688 109
110A few early releases of Cataplack had the PSGI $env in L<Catalyst::Engine>.
efa8265f 111Code has been maintained here for backwards compatibility reasons. This is no
112longer supported and will be removed in upcoming release, so you should update
0fb94688 113your code and / or upgrade to a newer version of L<Catalyst>
114
efa8265f 115=head3 Deprecate setting Response->body after using write/write_fh
8a3dcb98 116
117Setting $c->res->body to a filehandle after using $c->res->write or
118$c->res->write_fh is no longer considered allowed, since we can't send
119the filehandle to the underlying Plack handler. For now we will continue
3157d22a 120to support setting body to a simple value since this is possible, but at
121some future release a choice to use streaming indicates that you will do
122so for the rest of the request.
8a3dcb98 123
e27f6633 124
5bb2a5b3 125=head2 VERSION 5.90053
126
127We are now clarifying the behavior of log, plugins and configuration during
128the setup phase. Since Plugins might require a log during setup, setup_log
129must run BEFORE setup_plugins. This has the unfortunate side effect that
130anyone using the popular ConfigLoader plugin will not be able to supply
131configuration to custom logs since the configuration is not yet finalized
132when setup_log is run (when using ConfigLoader, which is a plugin and is
133not loaded until later.)
134
135As a workaround, you can supply custom log configuration directly into
136the configuration:
137
138 package MyApp;
139 use Catalyst;
140
141 __PACKAGE__->config(
142 my_custom_log_info => { %custom_args },
143 );
144
145 __PACKAGE__->setup;
146
147If you wish to configure the custom logger differently based on ENV, you can
148try:
149
150 package MyApp;
151
152 use Catalyst;
153 use Catalyst::Utils;
154
155 __PACKAGE__->config(
156 Catalyst::Utils::merge_hashes(
157 +{ my_custom_log_info => { %base_custom_args } },
158 +{ do __PACKAGE__->path_to( $ENV{WHICH_CONF}."_conf.pl") },
159 ),
160 );
161
162 __PACKAGE__->setup;
163
164Or create a standalone Configuration class that does the right thing.
165
166Basically if you want to configure a logger via Catalyst global configuration
167you can't use ConfigLoader because it will always be loaded too late to be of
168any use. Patches and workaround options welcomed!
169
9b3b1b9c 170=head2 VERSION 5.9XXXX 'cataplack'
c20710a1 171
172The Catalyst::Engine sub-classes have all been removed and deprecated,
173to be replaced with Plack handlers.
174
175Plack is an implementation of the L<PSGI> specification, which is
176a standard interface between web servers and application frameworks.
177
178This should be no different for developers, and you should not have to
179migrate your applications unless you are using a custom engine already.
180
181This change benefits Catalyst significantly by reducing the amount of
182code inside the framework, and means that the framework gets upstream
183bug fixes in L<Plack>, and automatically gains support for any web server
184which a L<PSGI> compliant handler is written for.
185
186It also allows you more flexibility with your application, and allows
187the use of cross web framework 'middleware'.
188
189Developers are recommended to read L<Catalyst::Upgrading> for notes about
190upgrading, especially if you are using an unusual deployment method.
191
192Documentation for how to take advantage of L<PSGI> can be found in
193L<Catalyst::PSGI>, and information about deploying your application
194has been moved to L<Catalyst::Manual::Deployment>.
195
196=head3 Updated modules:
197
198A number of modules have been updated to pass their tests or not
199produce deprecation warnings with the latest version of Catalyst.
200It is recommended that you upgrade any of these that you are using
201after installing this version of Catalyst.
202
203These extensions are:
204
205=over
206
207=item L<Catalyst::Engine::HTTP::Prefork>
208
209This is now deprecated, see L<Catalyst::Upgrading>.
210
211=item L<Test::WWW::Mechanize::Catalyst>
212
213Has been updated to not produce deprecation warnings, upgrade recommended.
214
215=item Catalyst::ActionRole::ACL
216
217Has been updated to fix failing tests (although older versions still
218function perfectly with this version of Catalyst).
219
220=item Catalyst::Plugin::Session::Store::DBIC
221
222Has been updated to fix failing tests (although older versions still
223function perfectly with this version of Catalyst).
224
14eb7697 225=item Catalyst::Plugin::Authentication
226
227Has been updated to fix failing tests (although older versions still
228function perfectly with this version of Catalyst).
229
c20710a1 230=back
1fae8c61 231
232=head1 PREVIOUS VERSIONS
233
9b3b1b9c 234=head2 VERSION 5.8XXXX 'catamoose'
1fae8c61 235
236=head3 Deprecations
b31499bc 237
e88235ff 238Please see L<Catalyst::Upgrading> for a full description of how changes in the
239framework may affect your application.
240
241Below is a brief list of features which have been deprecated in this release:
242
796a8358 243=over
b31499bc 244
796a8358 245=item ::[MVC]:: style naming scheme has been deprecated and will warn
b31499bc 246
e88235ff 247=item NEXT is deprecated for all applications and components, use MRO::Compat
b31499bc 248
e88235ff 249=item Dispatcher methods which are an implementation detail made private, public versions now warn.
b31499bc 250
e88235ff 251=item MyApp->plugin method is deprecated, use L<Catalyst::Model::Adaptor> instead.
796a8358 252
efa8265f 253=item __PACKAGE__->mk_accessors() is supported for backwards compatibility only, use Moose attributes instead in new code.
0a3b8de0 254
7df44a71 255=item Use of Catalyst::Base now warns
256
796a8358 257=back
258
1fae8c61 259=head3 New features
0a3b8de0 260
261=head3 Dispatcher
b31499bc 262
7df44a71 263=over
264
265=item Fix forwarding to Catalyst::Action objects.
266
267=item Add the dispatch_type method
268
269=back
b31499bc 270
0a3b8de0 271=head3 Restarter
b31499bc 272
6171ddd5 273The development server restarter has been improved to be compatible with
274immutable Moose classes, and also to optionally use
275L<B::Hooks::OP::Check::StashChange> to handle more complex application layouts
276correctly.
b31499bc 277
7df44a71 278=head3 $c->uri_for_action method.
b31499bc 279
7df44a71 280Give a private path to the Catalyst action you want to create a URI for.
6c18e892 281
0a3b8de0 282=head3 Logging
b31499bc 283
7df44a71 284Log levels have been made additive.
b31499bc 285
0a3b8de0 286=head3 L<Catalyst::Test>
287
288=over
289
290=item Change to use L<Sub::Exporter>.
291
0a3b8de0 292=item Support mocking multiple virtual hosts
293
294=item New methods like action_ok and action_redirect to write more compact tests
295
296=back
297
7df44a71 298=head3 Catalyst::Response
0a3b8de0 299
7df44a71 300=over
301
302=item *
303
304New print method which prints @data to the output stream, separated by $,.
305This lets you pass the response object to functions that want to write to an
306L<IO::Handle>.
307
308=item *
309
310Added code method as an alias for C<< $res->status >>
0a3b8de0 311
d5a6de01 312=back
313
1fae8c61 314=head3 Consequences of the Moose back end
b31499bc 315
796a8358 316=over
317
318=item *
319
7df44a71 320Components are fully compatible with Moose, and all Moose features, such as
321method modifiers, attributes, roles, BUILD and BUILDARGS methods are fully
322supported and may be used in components and applications.
323
324=item *
325
326Many reusable extensions which would previously have been plugins or base
327classes are better implemented as Moose roles.
328
329=item *
330
a0c37f08 331L<MooseX::MethodAttributes::Role::AttrContainer::Inheritable> is used to contain action
7df44a71 332attributes. This means that attributes are represented in the MOP, and
333decouples action creation from attributes.
796a8358 334
335=item *
336
0a3b8de0 337There is a reasonable API in Catalyst::Controller for working with
796a8358 338and registering actions, allowing a controller sub-class to replace
25f61108 339subroutine attributes for action declarations with an alternate
0a3b8de0 340syntax.
796a8358 341
342=item *
343
0a3b8de0 344Refactored capturing of $app from L<Catalyst::Controller> into
345L<Catalyst::Component::ApplicationAttribute> for easier reuse in other
7df44a71 346components.
347
348=item *
349
350Your application class is forced to become immutable at the end of compilation.
351
352=back
353
1fae8c61 354=head3 Bug fixes
7df44a71 355
356=over
357
358=item *
359
25f61108 360Don't ignore SIGCHLD while handling requests with the development server, so that
7df44a71 361system() and other ways of creating child processes work as expected.
362
363=item *
364
365Fixes for FastCGI when used with IIS 6.0
366
367=item *
368
369Fix a bug in uri_for which could cause it to generate paths with multiple
370slashes in them.
796a8358 371
372=item *
373
7df44a71 374Fix a bug in Catalyst::Stats, stopping garbage being inserted into
375the stats if a user calls begin => but no end
796a8358 376
377=back
378