Should I include the binary in a Rails plugin or not? - ruby-on-rails

I'm trying to roll out a little Rails plugin that is basically is just a wrapper to a 7zip archiver.
Should I include the 7zip binaries for windows, mac and linux with it or explain to user that it's a dependency and they need to get it working. I know it's not that difficult to install a 7zip, but what is the best practice in general. The reason I'm asking is cause I've ran so many times into gems that need some sort of dependency that doesn't compile properly or is not available in ready form for the OS in question and then I end up spending have a day hunting down for a binary or a way to compile the program. (Have happened to me both on Mac and Windows, not on Debian so far. )

There are several plugins that have dependancies on platform specific libraries. Maybe looking at how they are packaged as a gem will help. T name a few: mysql, mongo, ruby-libxml, etc

Related

Installing Ruby version 2.2.3 on windows - get config.yml

I am completely new to programming and am trying to install Ruby on Windows (64 bit). I get to the config.yml message and cannot set up a command to get past this to full set up.
I have been doing research online and find many people say ruby and Windows are not compatible.
Can anyone help advise/send a link that is a good workaround?
Thanks,
You can install Ruby on Windows. Probably the easiest way to get started with Ruby on Windows is to use Ruby Installer. They support up to Ruby 2.2.3 at the moment.
If you are looking for an alternative workflow, you might consider running a Vagrant machine on Windows. This workflow is described here.
The workflow involves using your native environment to launch a virtual machine that more closely matches the one typically used to deploy your code. You get the benefits of the windowing system tools (Sublime Text, RubyMine, Notepad++, etc) with the benefits of running specs and code in an environment closer to a production environment.
You can run Ruby on Windows, if you have the correct dependencies/libraries installed.
The best way to do this (if new) is to download a pre-compiled version of Ruby, from RubyInstaller:
EXE installer
ZIP file
Choose one of the above; they provide you the ability to put the Ruby.exe executable on your system, which (if installing with ZIP), needs to be added to your system PATH var.
--
I can explain more if required. If you want specific responses, you need to provide specific points (IE the full error message for config.yml etc)

Possibility to create Rails Standalone App

I did a small Rails-App. Is there a chance to convert it to a standalone version, so that you can run it without installing rails, running the server etc.?
Edit:
Sorry, the question came short. I want to pack the whole thing "as it is" with all gems, into one executable.
No installation of Ruby, no installation of RubyGems, no installation of the various gems, no installation of SQLite; There's only one executable!
You can create the standalone Executable with RubyScript2Exe.
RubyScript2Exe transforms your Ruby script into a standalone, compressed Windows, Linux or Mac OS X (Darwin) executable.
See the complete steps with details here.

Deploying a Rails app offline and with all dependencies intact

My goal is to deploy an existing Rails app on a machine. Oh, and the machine is on a handful of terminals in a remote community in the north of Australia. Oh, and I can't rely on there being Internet access for troubleshooting or admin purposes.
I'd like to package the app with a fresh copy of Rails and all of the apps dependencies (some of which must be built natively) so that the server can be run and a browser used as the front-end. The remote machines are modern Macs, and I should be able to replicate the configuration for testing here.
I've spotted some projects like Locomotive and Joyent Slingshot, as mentioned in this thread, but both of those projects seem to have been abandoned, and this link is Windows-specific.
Does anyone have any guidance as to what the modern way of doing this is? A community project thanks you in advance :)
Well, assuming those remove machines have Ruby available, you could use Bundler to freeze all your gems in your project:
bundle package
Read more at getbundler.com

Distribute CouchDB as part of a Rails app?

I am working on a Rails project and the Architect has asked me to investigate bundling CouchDB into to application so that it can be deployed by Capistrano across multiple platforms and managed by Rake.
My expectation was that I could set up the Erlang VM on the various environments and then distribute the CouchDB application with Capistrano. However I can't find any option to download CouchDB without the Erlang runtime. I can, however see an option to build CouchDB from source which I assume is platform dependent.
I am new to Erlang and CouchBD, am I missing something? Is there a way to bundle CouchDB into a Rails app and distribute it across multiple platforms?
Have a look at some of the tools for provisioning Rails services (such as passenger_stack). Passenger Stack will download, make and install the ancillary services for your Rails app ... might be something you can adapt or use as a base to install Erlang and CouchDB.
There are a bunch of alternatives to this as well. Deprec contains recipes for provisioning with Capistrano. Essential idea is the same though.
I think you will not find a silver bullet. Distributing Erlang is similar to distributing Ruby; however Ruby has the advantage of being included in many default OS installs.
I know ejabberd has pre-built binaries for many distros. You might investigate how they do it.
The correct solution probably depends on how many "multiple platforms" you are targeting. If it's "Ubuntu 8.04 plus Ubuntu 10.04" that is different from several Linux distros, plus OSX, plus FreeBSD. Typically only open source projects support those many platforms and ideally you can get patches from the community. For internal projects, I have seen teams standardize on a Linux build and use virtualization on Mac/Windows.
But back to your question:
Building from source is a reasonable option. You could build when you deploy, or pre-build for all platforms and then deploy the binaries. Both Erlang and CouchDB use Autoconf which means you can --prefix them to a dedicated location (more-or-less standalone apps). It will take some trial and error but your build script can
Platform-specific dependency setup: gcc, make, autoconf, everything you need. apt-get on Ubuntu, yum on RHEL, Macports, whatever you need to get a common platform on your development and deployment system
Compile and install the rest using the tools from step 1. Use configure --prefix=/opt/my_software to keep it all in one place. (You can totally uninstall with rm -rf.)
This is an medium-level challenge--mostly trial and error. If possible, work within a build framework such as Rake or Toby's suggestion passenger_stack. Good luck!

Limitations in running Ruby/Rails on windows

In the installation documentation to RoR it mentions that there are many limitations to running Ruby on Rails on Windows, and in some cases, whole libraries do not work.
How bad are these limitations, should I always default to Linux to code / run RoR, and is Iron Ruby expected to fix these limitations or are they core to the OS itself?
EDIT Thanks for the answer around installation and running on Linux, but I am really trying to understand the limitations in functionality as referenced in the installation documentation, and non-working libraries - I am trying to find a link to the comment, but it was referenced in an installation read me when I installed the msi package I think
EDIT
Thanks for the references to IronRuby lately, it is certainly a project to watch, and as it, obviously, is a .NET language, it will be invaluable if it lives up to the promises. Eventually, however, in my case, I just bit the bullet and installed an Ubuntu server.
<bias> I should've done it years ago </bias>
Here's an overview of the current issues with Rails on Windows:
Ruby and Rails are slower on Windows than they are on Unix-like OS's.
A few gems and libraries don't work on Windows.
Some Unix-isms aren't available on Windows (examples).
The community is mostly on either Mac or Linux (This is a particularly hard one to deal with; nobody wants to be alone on one island when the rest of the tribe are partying, having fun and getting along great over on the other island. Community is important. It seems that most Windows developers that start with Rails quickly switch to a Mac or Linux. However, the small community of Windows Ruby users that do persist are extremely friendly, dedicated and knowledgeable - go say hi.)
Note much of the advice that follows is now outdated due to the magnificent efforts of the RubyInstaller team in bringing stability, compatibility and performance to Ruby on Windows. I no longer have to use VirtualBox, which says a lot about how far Ruby on Windows has come.
If you want more technical detail, the following are required reading. :
Ruby for Windows - Part 1
Is Windows a supported platform for Ruby? I guess not
Testing the new One-Click Ruby Installer for Windows
Still playing with Ruby on Windows
Chatting with Luis Lavena (Ruby on Windows)
Choice quote from that last one is:
AkitaOnRails: The most obvious thing is that any Gem with C Extensions without proper binaries for Windows will fail. Trying to execute shell commands will fail and RubyInline as well. What else?
Luis Lavena: Hehe, that's just the tip of the iceberg
Having said all that, I don't find developing with Rails on Windows too painful. Using Ruby is, for the most part, a pleasure. I'd avoid InstantRails because, to be frank, it's just as easy to install Ruby properly using the one-click installer, then doing a gem install rails. If you need Apache and MySQL, WAMP is a good bet, although even these aren't required if you just stick with Mongrel and SQLite.
What I've taken to doing recently is running VirtualBox with an instance of Ubuntu Server that closely mirrors the deployment server. I map a network drive to the Ubuntu Server, then I edit and run my code directly on the VM. It uses hardly any memory (it's currently using ~43MB; contrast that with Firefox, which is using ~230MB) and Rails actually performs better than running it natively on Windows. Plus you can experiment with your virtual server in relative safety. It's a really nice setup, I highly recommend it.
Finally, here are a couple of Ruby/Rails blogs aimed at Windows users:
DEV_MEM.dump_to(:blog) (Luis Lavena)
Softies on Rails
Ruby On Windows
I found getting a development environment up and running with Instant Rails on Windows was really simple. Especially when using Netbeans or Radrails as the IDE.
Less than a 10 minute job.
What did those who struggled find to be the problem?
I've been developing Rails on a Windows PC for a couple of years and had no real problems installing back when I first started. However I recently re-built my machine and struggled to get the One-Click Ruby installer working and the latest version of Gems. So this is what I tried.
Option 1: Run a Linux Virtual Machine
I was really impressed with Charles Roper's idea of running Rails within a Linux virtual machine, and this is the route I intially went for. It all went pretty smoothly and I've been documenting it at budanters.blogspot.com. However I've been struggling with accessing the MySQL server (in Linux Virtual Machine) from the Windows host.
Option 2: Use jRuby
I recently installed the Windows version of NetBeans 6.5 Ruby bundle, and without being aware of it, this installs JRuby and the Rails gems. The IDE has a UI to install Gems, and I've now got my old application back up and running in my development enviromnent.
Update November 2009
I now use Netbeans 6.7 on Windows and in the whole I am very happy with it. The only downsides are that it installs JRuby 1.2, and I needed to install JRuby 1.3 manually to get something working (I can't remember what) and I have been completely unable to get deployment working with either Capistrano or Vlad the Deployer to work. Vlad uses Open4 which doesn't work with JRuby.
Update May 2010
Netbeans 6.8 comes with JRuby 1.4 so no longer have to fiddle around with manually installing JRuby 1.3. Also it seems that in JRuby 1.5 Open4 will now work, which means Vlad might start working.
Nobody mentioned Bitnami RubyStack yet? I've been using it for years, together with RadRails. Includes Apache, MySQL/Postgre, phpmyadmin, git etc. Optional Ruby 1.9.2/Rails 3.0b. You may also run the Ubuntu flavor of RubyStack in a VM but I haven't tried that yet.
There is a packaged installer available at http://railsinstaller.org/ which is worth checking out.
Personally I found getting Ruby + Rails up and running on windows a piece of cake. From download to browsing to my first 'HelloWorld' app took me all of 15 minutes. I didn't even bother with any of the InstantRails stuff.
Subsequently I can't say I encountered any of the reported speed problems or issues with Gems under Windows.
These guys also do a nice Ruby developers add on for Visual Studio:
http://www.sapphiresteel.com/
When I last fiddled around with Rails on windows, I used Instant Rails and found it to be a fairly painful process, except for the lack of updates to Instant Rails (which, from the look of the website is still a little bit of a problem, as instant Rails 2.0 uses ROR 2.0, while the newest version is 2.1). You might also look into the answers to this question as it mentions a number of other ways to get RoR running on windows easily.
You have windows options for getting everything up and installed, such as Instantrails:
However, my personal experience with trying to get colleagues up and running on windows is that it's a pretty painful experience. You should be able to get most (if not everything) running, but be prepared to spend a bit of time mucking round (and getting frustrated).
YMMV
I would probably recommend either Linux or Mac for rails development (but I'm slightly biased against windows, so you may need to take that with a grain of salt).
An option if you're stuck on Windows is to have virtual servers running Linux / BSD / what-have-you.
It solves lots of other problems also (allowing you to try multiple server configurations easily, etc.).
If you can't get away from windows use VMware and run some form of linux (ubuntu is popular). Your No.1 limitation will be compiled gems which do not play nicely on windows.
The majority of tutorials assume you're on some form of *nix, it's when you start to break outside of basic scaffolding when you'll feel the pain. Image manipulation, full-text search and even some db adapters will either only run on *nix or are a pain to setup.
The majority of web hosts run linux too, it's good to be developing on the same platform as your host, to avoid deployment headaches.
In general, Rails performance is a problem on Windows.
As far as your deployment setup, you can either run Rails in FCGI or use mongrel (and set up either Apache or IIS as a proxy). mod_rails (http://www.modrails.com) is the best deployment option for Rails today, but doesn't run on Windows.
You might find more luck using JRuby on Windows to run Rails in whatever JVM environment you want (tomcat, J2EE server, etc).
IronRuby isn't there yet to run Rails in a production environment, but eventually it will be aimed at running Rails inside any ASP.NET environment (IIS).
You could just use Cygwin and it's version of Ruby. That gets rid of the arguments about compiled gems not working on Windows - I've managed to compile a lot of gems that way.
The biggest limitation of running under Windows is that a lot of things are super slow.
See this thread. For a discussion.
Simple things like "script/console" and running rake tasks will take 5 times longer on Windows than they do on Linux or Mac.
Other limitations are:
No IE6 on Vista.
BackgroundRB and a many other c based gems do not work on Windows.
No passenger
I'm not a rails developer myself but I thought this may be of interest. Microsoft has released IronRuby 1.0, it's a version of Ruby that runs on the .NET platform that apparently runs 4x faster than the official Rails implementation on Windows.
http://www.drdobbs.com/open-source/224600662
Official site
http://ironruby.codeplex.com/
For a speedup you could try my loader speeder upper (helps rails run faster in doze): https://github.com/rdp/faster_require
Also checkout spork, which works in doze
Alternative of RailsIntaller is RailsFTW. The Ruby & Rails are more updated.

Resources