jetpack 0.1.0 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +2 -1
- data/LICENSE +14 -0
- data/README.markdown +35 -6
- data/Rakefile +14 -3
- data/bin/jetpack +39 -6
- data/bin_files/launch.erb +16 -0
- data/gems/bundler-1.1.0.gem +0 -0
- data/jetpack.gemspec +3 -3
- data/jetty_files/etc/fake.crt +31 -0
- data/jetty_files/etc/fake.jceks +0 -0
- data/jetty_files/etc/fake.key +51 -0
- data/jetty_files/etc/fake.pem +89 -0
- data/jetty_files/etc/jetty.xml.erb +53 -25
- data/jetty_files/jetty-init.erb +4 -0
- data/lib/jetpack/settings.rb +24 -10
- data/script/ci +1 -1
- data/spec/bundler_spec.rb +1 -1
- data/spec/filter_spec.rb +59 -0
- data/spec/rack_spec.rb +40 -0
- data/spec/sample_projects/has_gems_via_bundler/config/jetpack.yml +1 -1
- data/spec/sample_projects/has_gems_via_bundler_19/config/jetpack.yml +1 -1
- data/spec/sample_projects/has_gems_via_bundler_bad_gemfile_lock/config/jetpack.yml +1 -1
- data/spec/sample_projects/no_dependencies/config/jetpack.yml +1 -1
- data/spec/sample_projects/rack_19/Gemfile +3 -0
- data/spec/sample_projects/rack_19/Gemfile.lock +11 -0
- data/spec/sample_projects/rack_19/config.ru +8 -0
- data/spec/sample_projects/rack_19/config/jetpack.yml +9 -0
- data/spec/sample_projects/webapp/config/jetpack.yml +8 -5
- data/spec/sample_projects/webapp_filters/Gemfile +3 -0
- data/spec/sample_projects/webapp_filters/Gemfile.lock +88 -0
- data/spec/sample_projects/webapp_filters/app/controllers/application_controller.rb +5 -0
- data/spec/sample_projects/webapp_filters/config.ru +4 -0
- data/spec/sample_projects/webapp_filters/config/application.rb +46 -0
- data/spec/sample_projects/webapp_filters/config/boot.rb +6 -0
- data/spec/sample_projects/webapp_filters/config/environment.rb +5 -0
- data/spec/sample_projects/webapp_filters/config/environments/development.rb +25 -0
- data/spec/sample_projects/webapp_filters/config/environments/test.rb +35 -0
- data/spec/sample_projects/webapp_filters/config/initializers/secret_token.rb +7 -0
- data/spec/sample_projects/webapp_filters/config/jetpack.yml +10 -0
- data/spec/sample_projects/webapp_filters/config/jetpack_files/vendor/jetty/etc/custom-project-specific-jetty.xml +5 -0
- data/spec/sample_projects/webapp_filters/config/jetpack_files/vendor/jetty/etc/template-from-project-jetty.xml.erb +9 -0
- data/spec/sample_projects/webapp_filters/config/routes.rb +60 -0
- data/spec/sample_projects/webapp_filters/public/index.html +239 -0
- data/spec/sample_projects/webapp_filters/script/rails +6 -0
- data/spec/spec_helper.rb +0 -7
- data/spec/web_spec.rb +25 -9
- data/src/java/jetpack/filter/IgnoreUnknownHttpMethodsFilter.java +43 -0
- data/src/java/jetpack/filter/ValidUrlFilter.java +62 -0
- data/web_inf_files/web.xml.erb +46 -4
- metadata +110 -32
- data/gems/bundler-1.0.18.gem +0 -0
- data/gems/bundler-1.1.rc.gem +0 -0
data/jetty_files/jetty-init.erb
CHANGED
@@ -14,6 +14,10 @@ JETTY_LOGS=$WEB_ROOT/log
|
|
14
14
|
# Avoid unnecessary su call if we're already the app user
|
15
15
|
test `whoami` != <%=@settings.app_user%> && JETTY_USER=<%=@settings.app_user%>
|
16
16
|
|
17
|
+
<% if @settings.environment %>
|
18
|
+
source <%=@settings.environment%>
|
19
|
+
<% end %>
|
20
|
+
|
17
21
|
# Startup script for jetty under *nix systems (it works under NT/cygwin too).
|
18
22
|
|
19
23
|
# To get the service to restart correctly on reboot, uncomment below (3 lines):
|
data/lib/jetpack/settings.rb
CHANGED
@@ -12,17 +12,23 @@ module Jetpack
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def initialize(project_dir, user_defined_options)
|
15
|
-
contents
|
16
|
-
contents["app_root"]
|
17
|
-
contents["app_user"]
|
18
|
-
contents["java_options"]
|
19
|
-
contents["https_port"]
|
20
|
-
contents["http_port"]
|
21
|
-
contents["jruby_rack"]
|
22
|
-
contents["jetty"]
|
23
|
-
contents["
|
15
|
+
contents = {}
|
16
|
+
contents["app_root"] = user_defined_options["app_root"] || File.expand_path(project_dir)
|
17
|
+
contents["app_user"] = user_defined_options["app_user"] || Etc.getpwuid(File.stat(contents["app_root"]).uid).name
|
18
|
+
contents["java_options"] = user_defined_options["java_options"] || "-Xmx2048m"
|
19
|
+
contents["https_port"] = user_defined_options["https_port"] if user_defined_options.key?("https_port")
|
20
|
+
contents["http_port"] = user_defined_options["http_port"] if user_defined_options.key?("http_port")
|
21
|
+
contents["jruby_rack"] = user_defined_options["jruby-rack"] if user_defined_options.key?("jruby-rack")
|
22
|
+
contents["jetty"] = user_defined_options["jetty"] if user_defined_options.key?("jetty")
|
23
|
+
contents["jetty_filters"] = user_defined_options["jetty_filters"] if user_defined_options.key?("jetty_filters")
|
24
|
+
contents["jruby"] = user_defined_options["jruby"] if user_defined_options.key?("jruby")
|
24
25
|
contents["max_concurrent_connections"] = user_defined_options["max_concurrent_connections"] || 20
|
25
|
-
contents["ruby_version"]
|
26
|
+
contents["ruby_version"] = user_defined_options["ruby_version"] || "1.8"
|
27
|
+
contents["app_type"] = user_defined_options["app_type"] || "rails"
|
28
|
+
contents["environment"] = user_defined_options["environment"] || nil
|
29
|
+
contents["keystore_type"] = user_defined_options["keystore_type"] || "PKCS12"
|
30
|
+
contents["keystore"] = user_defined_options["keystore"] || nil
|
31
|
+
contents["keystore_password"] = user_defined_options["keystore_password"] || nil
|
26
32
|
|
27
33
|
@keys = contents.keys.sort
|
28
34
|
|
@@ -37,6 +43,14 @@ module Jetpack
|
|
37
43
|
respond_to?(:jetty)
|
38
44
|
end
|
39
45
|
|
46
|
+
def jetty_filters?
|
47
|
+
respond_to?(:jetty_filters)
|
48
|
+
end
|
49
|
+
|
50
|
+
def rails?
|
51
|
+
app_type == 'rails'
|
52
|
+
end
|
53
|
+
|
40
54
|
def jetty_pid_path
|
41
55
|
File.join(app_root, "/vendor/jetty/run/jetty.pid")
|
42
56
|
end
|
data/script/ci
CHANGED
data/spec/bundler_spec.rb
CHANGED
@@ -36,7 +36,7 @@ describe "jetpack - bundler and gems" do
|
|
36
36
|
it "can be used from a script fed to jruby." do
|
37
37
|
rake_result = x(%{spec/sample_projects/has_gems_via_bundler/bin/ruby -e 'require \\"rubygems\\"; require \\"bundler\\"; puts Bundler::VERSION'})
|
38
38
|
rake_result[:stderr].should == ""
|
39
|
-
rake_result[:stdout].should include("1.1.
|
39
|
+
rake_result[:stdout].should include("1.1.0")
|
40
40
|
rake_result[:exitstatus].should == 0
|
41
41
|
end
|
42
42
|
end
|
data/spec/filter_spec.rb
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "yaml"
|
3
|
+
|
4
|
+
describe "jetpack - filters" do
|
5
|
+
before(:all) do
|
6
|
+
reset
|
7
|
+
@result = x!("bin/jetpack spec/sample_projects/webapp_filters")
|
8
|
+
end
|
9
|
+
|
10
|
+
after(:all) do
|
11
|
+
reset
|
12
|
+
end
|
13
|
+
|
14
|
+
it "runs" do
|
15
|
+
pid_to_kill = run_app
|
16
|
+
begin
|
17
|
+
x!("curl https://localhost:11443/hello --insecure")[:stdout].split("<br/>").first.strip.should == "Hello World"
|
18
|
+
|
19
|
+
x!("curl https://localhost:11443/hello?foo=bar --insecure")[:stdout].split("<br/>").first.strip.should == "Hello World"
|
20
|
+
|
21
|
+
x!("curl --head --request DEBUG https://localhost:11443/ --insecure")[:stdout].split("\n").first.strip.should == "HTTP/1.1 405 Method Not Allowed"
|
22
|
+
|
23
|
+
x!("curl --head 'https://localhost:11443/<script>xss</script>.aspx' --insecure")[:stdout].split("\n").first.strip.should == "HTTP/1.1 400 Bad Request"
|
24
|
+
|
25
|
+
x!("curl --head 'https://localhost:11443/?foo=<script>xss</script>.aspx' --insecure")[:stdout].split("\n").first.strip.should == "HTTP/1.1 400 Bad Request"
|
26
|
+
|
27
|
+
x!("curl http://localhost:11080/hello")[:stdout].split("<br/>").first.strip.should == "Hello World"
|
28
|
+
|
29
|
+
x!("curl http://localhost:11080/hello?foo=bar")[:stdout].split("<br/>").first.strip.should == "Hello World"
|
30
|
+
|
31
|
+
x!("curl http://#{Socket.gethostname}:11080/hello")[:stdout].split("<br/>").first.strip.should == "Hello World"
|
32
|
+
|
33
|
+
x!("curl http://127.0.0.1:11080/hello")[:stdout].split("<br/>").first.strip.should == "Hello World"
|
34
|
+
|
35
|
+
x!("curl --head --request DEBUG http://localhost:11080/")[:stdout].split("\n").first.strip.should == "HTTP/1.1 405 Method Not Allowed"
|
36
|
+
|
37
|
+
x!("curl --head 'http://localhost:11080/<script>xss</script>.aspx'")[:stdout].split("\n").first.strip.should == "HTTP/1.1 400 Bad Request"
|
38
|
+
|
39
|
+
x!("curl --head 'http://localhost:11080/?foo=<script>xss</script>.aspx'")[:stdout].split("\n").first.strip.should == "HTTP/1.1 400 Bad Request"
|
40
|
+
|
41
|
+
ensure
|
42
|
+
system("kill -9 #{pid_to_kill}")
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def run_app
|
47
|
+
jetty_pid = Process.spawn({'RAILS_ENV' => 'development'}, 'java', '-jar', 'start.jar', {:chdir => "spec/sample_projects/webapp_filters/vendor/jetty"})
|
48
|
+
start_time = Time.now
|
49
|
+
loop do
|
50
|
+
begin
|
51
|
+
TCPSocket.open("localhost", 11443)
|
52
|
+
return jetty_pid
|
53
|
+
rescue Errno::ECONNREFUSED
|
54
|
+
raise "it's taking too long to start the server, something might be wrong" if Time.now - start_time > 60
|
55
|
+
sleep 0.1
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
data/spec/rack_spec.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "yaml"
|
3
|
+
|
4
|
+
describe "jetpack - web start for rack app" do
|
5
|
+
before(:all) do
|
6
|
+
reset
|
7
|
+
@result = x!("bin/jetpack spec/sample_projects/rack_19")
|
8
|
+
end
|
9
|
+
|
10
|
+
after(:all) do
|
11
|
+
reset
|
12
|
+
end
|
13
|
+
|
14
|
+
it "runs" do
|
15
|
+
pid_to_kill = run_app("spec/sample_projects/rack_19")
|
16
|
+
begin
|
17
|
+
#HTTP 4443 - intended to be proxied to from something listening on 443
|
18
|
+
x!("curl https://localhost:10443/hello --insecure")[:stdout].split("<br/>").first.strip.should == "Hello World"
|
19
|
+
|
20
|
+
#HTTP 9080 - intended for internal health checking
|
21
|
+
x!("curl http://localhost:10080/hello --insecure")[:stdout].split("<br/>").first.strip.should == "Hello World"
|
22
|
+
ensure
|
23
|
+
system("kill -9 #{pid_to_kill}")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def run_app(app)
|
28
|
+
jetty_pid = Process.spawn({'RAILS_ENV' => 'development'}, 'java', '-jar', 'start.jar', {:chdir => "#{app}/vendor/jetty"})
|
29
|
+
start_time = Time.now
|
30
|
+
loop do
|
31
|
+
begin
|
32
|
+
TCPSocket.open("localhost", 10443)
|
33
|
+
return jetty_pid
|
34
|
+
rescue Errno::ECONNREFUSED
|
35
|
+
raise "it's taking too long to start the server, something might be wrong" if Time.now - start_time > 60
|
36
|
+
sleep 0.1
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -1 +1 @@
|
|
1
|
-
jruby: "file://<%= File.expand_path('spec/local_mirror') %>/jruby-complete-1.6.
|
1
|
+
jruby: "file://<%= File.expand_path('spec/local_mirror') %>/jruby-complete-1.6.7.jar"
|
@@ -1,2 +1,2 @@
|
|
1
|
-
jruby: "file://<%= File.expand_path('spec/local_mirror') %>/jruby-complete-1.6.
|
1
|
+
jruby: "file://<%= File.expand_path('spec/local_mirror') %>/jruby-complete-1.6.7.jar"
|
2
2
|
ruby_version: 1.9
|
@@ -1 +1 @@
|
|
1
|
-
jruby: "file://<%= File.expand_path('spec/local_mirror') %>/jruby-complete-1.6.
|
1
|
+
jruby: "file://<%= File.expand_path('spec/local_mirror') %>/jruby-complete-1.6.7.jar"
|
@@ -1 +1 @@
|
|
1
|
-
jruby: "file://<%= File.expand_path('spec/local_mirror') %>/jruby-complete-1.6.
|
1
|
+
jruby: "file://<%= File.expand_path('spec/local_mirror') %>/jruby-complete-1.6.7.jar"
|
@@ -0,0 +1,9 @@
|
|
1
|
+
jruby: "file://<%= File.expand_path('spec/local_mirror') %>/jruby-complete-1.6.7.jar"
|
2
|
+
jetty: "file://<%= File.expand_path('spec/local_mirror') %>/jetty-hightide-8.1.3.v20120416.zip"
|
3
|
+
jruby-rack: "file://<%= File.expand_path('spec/local_mirror') %>/jruby-rack-1.1.5.jar"
|
4
|
+
http_port: 10080
|
5
|
+
https_port: 10443
|
6
|
+
ruby_version: 1.9
|
7
|
+
app_type: rack
|
8
|
+
keystore: "etc/fake.p12"
|
9
|
+
keystore_password: "foobar"
|
@@ -1,6 +1,9 @@
|
|
1
|
-
jruby: "file://<%= File.expand_path('spec/local_mirror') %>/jruby-complete-1.6.
|
2
|
-
jetty: "file://<%= File.expand_path('spec/local_mirror') %>/jetty-hightide-
|
3
|
-
jruby-rack: "file://<%= File.expand_path('spec/local_mirror') %>/jruby-rack-1.
|
4
|
-
http_port:
|
5
|
-
https_port:
|
1
|
+
jruby: "file://<%= File.expand_path('spec/local_mirror') %>/jruby-complete-1.6.7.jar"
|
2
|
+
jetty: "file://<%= File.expand_path('spec/local_mirror') %>/jetty-hightide-8.1.3.v20120416.zip"
|
3
|
+
jruby-rack: "file://<%= File.expand_path('spec/local_mirror') %>/jruby-rack-1.1.5.jar"
|
4
|
+
http_port: 9080
|
5
|
+
https_port: 9443
|
6
6
|
max_concurrent_connections: 15
|
7
|
+
java_options: -Xmx256M
|
8
|
+
keystore: "etc/fake.p12"
|
9
|
+
keystore_password: "foobar"
|
@@ -0,0 +1,88 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
actionmailer (3.1.0)
|
5
|
+
actionpack (= 3.1.0)
|
6
|
+
mail (~> 2.3.0)
|
7
|
+
actionpack (3.1.0)
|
8
|
+
activemodel (= 3.1.0)
|
9
|
+
activesupport (= 3.1.0)
|
10
|
+
builder (~> 3.0.0)
|
11
|
+
erubis (~> 2.7.0)
|
12
|
+
i18n (~> 0.6)
|
13
|
+
rack (~> 1.3.2)
|
14
|
+
rack-cache (~> 1.0.3)
|
15
|
+
rack-mount (~> 0.8.2)
|
16
|
+
rack-test (~> 0.6.1)
|
17
|
+
sprockets (~> 2.0.0)
|
18
|
+
activemodel (3.1.0)
|
19
|
+
activesupport (= 3.1.0)
|
20
|
+
bcrypt-ruby (~> 3.0.0)
|
21
|
+
builder (~> 3.0.0)
|
22
|
+
i18n (~> 0.6)
|
23
|
+
activerecord (3.1.0)
|
24
|
+
activemodel (= 3.1.0)
|
25
|
+
activesupport (= 3.1.0)
|
26
|
+
arel (~> 2.2.1)
|
27
|
+
tzinfo (~> 0.3.29)
|
28
|
+
activeresource (3.1.0)
|
29
|
+
activemodel (= 3.1.0)
|
30
|
+
activesupport (= 3.1.0)
|
31
|
+
activesupport (3.1.0)
|
32
|
+
multi_json (~> 1.0)
|
33
|
+
arel (2.2.1)
|
34
|
+
bcrypt-ruby (3.0.1)
|
35
|
+
builder (3.0.0)
|
36
|
+
erubis (2.7.0)
|
37
|
+
hike (1.2.1)
|
38
|
+
i18n (0.6.0)
|
39
|
+
mail (2.3.0)
|
40
|
+
i18n (>= 0.4.0)
|
41
|
+
mime-types (~> 1.16)
|
42
|
+
treetop (~> 1.4.8)
|
43
|
+
mime-types (1.16)
|
44
|
+
multi_json (1.0.3)
|
45
|
+
polyglot (0.3.2)
|
46
|
+
rack (1.3.4)
|
47
|
+
rack-cache (1.0.3)
|
48
|
+
rack (>= 0.4)
|
49
|
+
rack-mount (0.8.3)
|
50
|
+
rack (>= 1.0.0)
|
51
|
+
rack-ssl (1.3.2)
|
52
|
+
rack
|
53
|
+
rack-test (0.6.1)
|
54
|
+
rack (>= 1.0)
|
55
|
+
rails (3.1.0)
|
56
|
+
actionmailer (= 3.1.0)
|
57
|
+
actionpack (= 3.1.0)
|
58
|
+
activerecord (= 3.1.0)
|
59
|
+
activeresource (= 3.1.0)
|
60
|
+
activesupport (= 3.1.0)
|
61
|
+
bundler (~> 1.0)
|
62
|
+
railties (= 3.1.0)
|
63
|
+
railties (3.1.0)
|
64
|
+
actionpack (= 3.1.0)
|
65
|
+
activesupport (= 3.1.0)
|
66
|
+
rack-ssl (~> 1.3.2)
|
67
|
+
rake (>= 0.8.7)
|
68
|
+
rdoc (~> 3.4)
|
69
|
+
thor (~> 0.14.6)
|
70
|
+
rake (0.9.2)
|
71
|
+
rdoc (3.9.4)
|
72
|
+
sprockets (2.0.1)
|
73
|
+
hike (~> 1.2)
|
74
|
+
rack (~> 1.0)
|
75
|
+
tilt (~> 1.1, != 1.3.0)
|
76
|
+
thor (0.14.6)
|
77
|
+
tilt (1.3.3)
|
78
|
+
treetop (1.4.10)
|
79
|
+
polyglot
|
80
|
+
polyglot (>= 0.3.1)
|
81
|
+
tzinfo (0.3.30)
|
82
|
+
|
83
|
+
PLATFORMS
|
84
|
+
java
|
85
|
+
ruby
|
86
|
+
|
87
|
+
DEPENDENCIES
|
88
|
+
rails
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require File.expand_path('../boot', __FILE__)
|
2
|
+
|
3
|
+
# require “active_record/railtie”
|
4
|
+
require "action_controller/railtie"
|
5
|
+
require "action_mailer/railtie"
|
6
|
+
require "active_resource/railtie"
|
7
|
+
require "rails/test_unit/railtie"
|
8
|
+
|
9
|
+
# If you have a Gemfile, require the gems listed there, including any gems
|
10
|
+
# you've limited to :test, :development, or :production.
|
11
|
+
Bundler.require(:default, Rails.env) if defined?(Bundler)
|
12
|
+
|
13
|
+
module Foo
|
14
|
+
class Application < Rails::Application
|
15
|
+
# Settings in config/environments/* take precedence over those specified here.
|
16
|
+
# Application configuration should go into files in config/initializers
|
17
|
+
# -- all .rb files in that directory are automatically loaded.
|
18
|
+
|
19
|
+
# Custom directories with classes and modules you want to be autoloadable.
|
20
|
+
# config.autoload_paths += %W(#{config.root}/extras)
|
21
|
+
|
22
|
+
# Only load the plugins named here, in the order given (default is alphabetical).
|
23
|
+
# :all can be used as a placeholder for all plugins not explicitly named.
|
24
|
+
# config.plugins = [ :exception_notification, :ssl_requirement, :all ]
|
25
|
+
|
26
|
+
# Activate observers that should always be running.
|
27
|
+
# config.active_record.observers = :cacher, :garbage_collector, :forum_observer
|
28
|
+
|
29
|
+
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
|
30
|
+
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
|
31
|
+
# config.time_zone = 'Central Time (US & Canada)'
|
32
|
+
|
33
|
+
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
|
34
|
+
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
|
35
|
+
# config.i18n.default_locale = :de
|
36
|
+
|
37
|
+
# JavaScript files you want as :defaults (application.js is always included).
|
38
|
+
# config.action_view.javascript_expansions[:defaults] = %w(jquery rails)
|
39
|
+
|
40
|
+
# Configure the default encoding used in templates for Ruby 1.9.
|
41
|
+
config.encoding = "utf-8"
|
42
|
+
|
43
|
+
# Configure sensitive parameters which will be filtered from the log file.
|
44
|
+
config.filter_parameters += [:password]
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
Foo::Application.configure do
|
2
|
+
# Settings specified here will take precedence over those in config/application.rb
|
3
|
+
|
4
|
+
# In the development environment your application's code is reloaded on
|
5
|
+
# every request. This slows down response time but is perfect for development
|
6
|
+
# since you don't have to restart the webserver when you make code changes.
|
7
|
+
config.cache_classes = false
|
8
|
+
|
9
|
+
# Log error messages when you accidentally call methods on nil.
|
10
|
+
config.whiny_nils = true
|
11
|
+
|
12
|
+
# Show full error reports and disable caching
|
13
|
+
config.consider_all_requests_local = true
|
14
|
+
config.action_controller.perform_caching = false
|
15
|
+
|
16
|
+
# Don't care if the mailer can't send
|
17
|
+
config.action_mailer.raise_delivery_errors = true
|
18
|
+
|
19
|
+
# Print deprecation notices to the Rails logger
|
20
|
+
config.active_support.deprecation = :log
|
21
|
+
|
22
|
+
# Only use best-standards-support built into browsers
|
23
|
+
config.action_dispatch.best_standards_support = :builtin
|
24
|
+
end
|
25
|
+
|