Sinatra without RubyGems

J

Joel VanderWerf

XY$ said:
I wonder if it is possible to run Sinatra without useing RubyGems.

Depends on what you mean. For my purposes, the answer is yes.

I use gem for package management, but crown[1] to construct a
self-contained set of lib, ext, and bin dirs so that my program can run
without any reference to rubygems.

The following command builds the self-contained dirs that contain
everything I need for what I do with sinatra:

$ crown -v mydir sequel nokogiri sinatra json thin pg

All those gems are now available as ordinary libraries under mydir/.
There's no chance that a gem update will break your code. You can check
in the gem stuff alongside your project code so that you have a snapshot
of exactly what libs you were using at that version.

Running crown will also output something like:

PATH=/home/username/project/somedir/bin
RUBYLIB=/home/username/project/somedir/ext/json/ext:/home/username/project/somedir/lib:/home/username/project/somedir/ext

You can paste this into your main app file so that it knows where to
find the libs. Also, you can remove RUBYOPT='-rubygems' from your env.

[1] http://github.com/vjoel/crown
 
X

XY$

XY$ said:
I wonder if it is possible to run Sinatra without useing RubyGems.

Depends on what you mean. For my purposes, the answer is yes.

I use gem for package management, but crown[1] to construct a
self-contained set of lib, ext, and bin dirs so that my program can run
without any reference to rubygems.

The following command builds the self-contained dirs that contain
everything I need for what I do with sinatra:

$ crown -v mydir sequel nokogiri sinatra json thin pg

All those gems are now available as ordinary libraries under mydir/.
There's no chance that a gem update will break your code. You can check
in the gem stuff alongside your project code so that you have a snapshot
of exactly what libs you were using at that version.

Running crown will also output something like:

PATH=/home/username/project/somedir/bin
RUBYLIB=/home/username/project/somedir/ext/json/ext:/home/username/project/somedir/lib:/home/username/project/somedir/ext

You can paste this into your main app file so that it knows where to
find the libs. Also, you can remove RUBYOPT='-rubygems' from your env.

[1]http://github.com/vjoel/crown

OK
I was not precise in my question.

The web hosting service I am testing supports Ruby but not RoR or
RubyGems. I can run Ruby scripts as CGI but I wonder if I would be
able to use Sinatra.

Thanks
 
C

Caleb Clausen

XY$ said:
I wonder if it is possible to run Sinatra without useing RubyGems.

Depends on what you mean. For my purposes, the answer is yes.

I use gem for package management, but crown[1] to construct a

OK
I was not precise in my question.

The web hosting service I am testing supports Ruby but not RoR or
RubyGems. I can run Ruby scripts as CGI but I wonder if I would be
able to use Sinatra.

Unless it's a severely constrained environment like heroku, you can
usually install rubygems in your user account and just go from there.
Check the rubygems docs for how to do that.

If you don't like that, something like joel's crown, gem bundler, or
rip may suit you better. Typically, these tools collect together all
the software your app depends on in a subdir of your project, so you
can just upload the entire directory tree to your server and then run
it right there. This is what joel was trying to explain to you. (I
think. I've never used any of those other tools, myself.)
 
W

Walton Hoops

XY$ said:
I wonder if it is possible to run Sinatra without useing RubyGems.
Depends on what you mean. For my purposes, the answer is yes.

I use gem for package management, but crown[1] to construct a
self-contained set of lib, ext, and bin dirs so that my program can run
without any reference to rubygems.

The following command builds the self-contained dirs that contain
everything I need for what I do with sinatra:

$ crown -v mydir sequel nokogiri sinatra json thin pg

All those gems are now available as ordinary libraries under mydir/.
There's no chance that a gem update will break your code. You can check
in the gem stuff alongside your project code so that you have a snapshot
of exactly what libs you were using at that version.

Running crown will also output something like:

PATH=/home/username/project/somedir/bin
RUBYLIB=/home/username/project/somedir/ext/json/ext:/home/username/project/somedir/lib:/home/username/project/somedir/ext

You can paste this into your main app file so that it knows where to
find the libs. Also, you can remove RUBYOPT='-rubygems' from your env.

[1]http://github.com/vjoel/crown
OK
I was not precise in my question.

The web hosting service I am testing supports Ruby but not RoR or
RubyGems. I can run Ruby scripts as CGI but I wonder if I would be
able to use Sinatra.

Thanks
I hope and pray you mean FastCGI, or FCGI, because CGI will be painfully
slow.

The instructions he gave you will work fine. Just grab the gem on your
development machine and unpack it into your project directory with
crown. Then deploy as normal. I found these instructions for setting
up via FastCGI:
http://www.gittr.com/index.php/arch...sinatra-application-on-dreamhost-via-fastcgi/

I don't know what regular CGI would take. Hope this helps.
 
J

Jonathan Groll

XY$ said:
I wonder if it is possible to run Sinatra without useing RubyGems.

Depends on what you mean. For my purposes, the answer is yes.

I use gem for package management, but crown[1] to construct a
self-contained set of lib, ext, and bin dirs so that my program can run
without any reference to rubygems.

Impressive! What do you see as the benefits of crown over nkryptic's
sandbox:

http://github.com/nkryptic/sandbox

I'm trying to make up my mind which approach should be used in different situations.

Cheers,
Jonathan
 
J

Joel VanderWerf

Jonathan said:
XY$ said:
I wonder if it is possible to run Sinatra without useing RubyGems.

Depends on what you mean. For my purposes, the answer is yes.

I use gem for package management, but crown[1] to construct a
self-contained set of lib, ext, and bin dirs so that my program can
run without any reference to rubygems.

Impressive! What do you see as the benefits of crown over nkryptic's
sandbox:

http://github.com/nkryptic/sandbox

I'm trying to make up my mind which approach should be used in different
situations.

Wasn't aware of that... IIUC, the differences are:

- programs in a "sandbox" still use the rubygems lib at runtime (hence a
small cost in startup time etc.)

- sandbox lets you use the gem command to work with the gems in the
sandbox (with crown, the gems are copied and turned into ordinary ruby
libs that are no longer gems)

I can see a need for each of these tools. Sandbox would be good for
testing a program against different versions or combinations of gems,
perhaps. Crown is good for preparing an "all-in-one" dir that can be
packaged with no deps other than ruby, or can be checked into version
control. They are both good for freezing the gem state at one point in
its history.

Probably, they should both be made into gem plugins...
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,156
Messages
2,570,878
Members
47,408
Latest member
AlenaRay88

Latest Threads

Top