-
-
Save rtomayko/54177 to your computer and use it in GitHub Desktop.
In response to all the responses to: | |
http://twitter.com/rtomayko/status/1155906157 | |
You should never do this in a source file included with your library, | |
app, or tests: | |
require 'rubygems' | |
The system I use to manage my $LOAD_PATH is not your library/app/tests | |
concern. Whether rubygems is used or not is an environment issue. Your | |
library or app should have no say in the matter. Explicitly requiring | |
rubygems is either not necessary or misguided. | |
When you feel the urge to "require 'rubygems'" because some shit isn't | |
working, stop and consider whether one of these solutions is more | |
appropriate: | |
1. RubyGems installs special versions of executables included with | |
gems. Here's rake's as an example: | |
$ cat /opt/local/bin/rake | |
#!/opt/local/bin/ruby | |
# | |
# This file was generated by RubyGems. | |
# | |
# The application 'rake' is installed as part of a gem, and | |
# this file is here to facilitate running it. | |
# | |
require 'rubygems' | |
version = ">= 0" | |
if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then | |
version = $1 | |
ARGV.shift | |
end | |
gem 'rake', version | |
load 'rake' | |
In this case, rubygems is required when the executable is run. Explicitly | |
requiring rubygems in code loaded by these files doesn't make sense. The | |
whole point of these wrapper scripts is to push the rubygems loading | |
machinery into the environment and out of your app/library/tests. | |
2. When running "ruby FOO.rb" and a LoadError occurs because rubygems | |
is not available, DO NOT add "require 'rubygems'" to FOO.rb. Instead, | |
run the command as "ruby -rubygems FOO.rb". This will require rubygems | |
before evaluating FOO.rb. | |
3. When running "ruby FOO.rb" and a LoadError occurs because rubygems | |
is not available, DO NOT add "require 'rubygems'" to FOO.rb. Instead, | |
set the RUBYOPT environment variable: | |
$ RUBYOPT="rubygems" | |
$ export RUBYOPT | |
$ ruby FOO.rb | |
You can even put that in your ~/.{bash,zsh,sh}rc if you prefer to always | |
have rubygems loaded and available. | |
Why You Shouldn't Force Rubygems On People | |
------------------------------------------ | |
When I use your library, deploy your app, or run your tests I may not want | |
to use rubygems. When you "require 'rubygems'" in your code, you remove my | |
ability to make that decision. I cannot unrequire rubygems, but you can | |
not require it in the first place. |
Granted, I'm new to ruby, But it seems like using the RUBYOPT variable with "rubygems" I get : ruby: no such file to load -- ubygems (LoadError). That's at the very least confusing.
I am new to ruby, but as per http://guides.rubygems.org/rubygems-basics/#requiring-code, it says must use require 'rubygems' for Ruby 1.8, I come to this page while I was trying to make a skeleton for rack-ember application.
Also it will be good if you can provide me any link for rack application skeleton.
@johnlabarge Yeah, -rubygems
is incorrect. It should be -rrubygems
. The first r
is short for "require". See ruby --help
:
-rlibrary require the library before executing your script
@Ajedi32 That's not really true, there's a ubygem file
, so -rubygems
works as expected.
If you need to remove this from a bunch of source files, this library might help 😛
Because your library's users might prefer to use a different package manager, like rip or dpkg.