Rails goes out of its way to avoid forcing an installation of bcrypt 
because it is a binary library. 
 See https://github.com/rails/rails/blob/v4.2.3/Gemfile#L21

Nokogiri forces installation of 2 binary libraries (libxml2 and libxslt), 
so one would expect it not to be a dependency of any of the core components 
of Rails.

However, starting with actionview 4.2.0, nokogiri is now a dependency.

That means every time actionview appears in a Gemfile.lock, so does 
nokogiri.  I would often include ActionView 4.1 in non-Rails projects just 
to use number_to_currency, but now with the nokogiri dependency, the 
overhead is hardly worth it.

Consider the fact that I'm deploying about 5 such projects to the same 
server, all using separate BUNDLE_PATH's.  That means 5 installations of 
nokogiri, none of which are being used.  This adds time to every 
`capistrano bundler:install` and a significant amount of disk space is 
wasted on this.  For any other gem, this wouldn't make much of a 
difference, but nokogiri is really big and takes a long time to install, 
and Rails has already set a precedent by not including the (much lighter) 
bcrypt.

Is the rails-core team open to the following solutions:
---------------

1) Separate the parts of actionview that depend on rails-dom-testing into a 
separate gem

Create an actionview-testing gem, which would only be necessary in the 
Gemfile's test group, thus saving even more overhead in production.  This 
would depend on action-view and rails-dom-testing, but actionview would not 
depend on rail-dom-testing.

(The same approach that I suggest below for rails-html-sanitizer might work 
for rails-dom-testing too, but it may add more complexity that carving a 
separate gem--there are multiple code paths that can lead you to 
rails-dom-testing methods, whereas there's a single method that's a 
bottleneck for all entries to rails-html-sanitizer.)
---------------

2) In ActionView::Helpers::SanitizeHelper, move `require 
"rails-html-sanitizer"` into the  #sanitizer_vendor method.

If a LoadError is raised, handle it just as we do for 
bcrypt: 
https://github.com/rails/rails/blob/v4.2.3/activemodel/lib/active_model/secure_password.rb#L60

Add rails-html-sanitizer to the Gemfile template so that it's automatically 
in new Rails projects.  Only upgrades and would need to manually add this 
to the Gemfile, so we would have to add it to the upgrade guide. 
 Standalone actionview projects would also need to add it to their Gemfile, 
but *rafaelfranca <https://github.com/rafaelfranca>* has assured me that 
non-Rails projects should never be using rails-html-sanitizer anyway: 
https://github.com/rails/rails-html-sanitizer/issues/25#issuecomment-60833972.
---------------

I would love to get started on a PR.  I just need to know if it will be 
considered.





-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to rubyonrails-core+unsubscr...@googlegroups.com.
To post to this group, send email to rubyonrails-core@googlegroups.com.
Visit this group at http://groups.google.com/group/rubyonrails-core.
For more options, visit https://groups.google.com/d/optout.

Reply via email to