Migrating an entire ruby/rails set up from one machine to another - ruby

Hello: I have a windows machine and a linux machine that both have the gems, ruby version, rails version, etc that I need. I want to copy the configuration for the Windows box to a couple of other windows boxes, and do the same for the Linux boxes (Ubuntu). I will move these to a studio whereby it won't have access to the internet during my stay.
I will install the same ruby version, and then I want ALL gems and configurations to be consistent and up to date across the board using the configs of the Linux and Window boxes as my guide. Can anyone advise how to do this if possible? For example, what folders/files would I need move, or can I simply copy and past the entire install of each config and paste them to the new boxes.
Thanks,
STS

You are probably looking for the Bundler. It makes such tasks very easy. Just don't forget to reinstall bundle on the different system. Everything is kept, packages are specified in the Gemfile.
Just read docs, it's very intuitive to use.

Related

Benefits of Homebrew Cask over tradicional installation method?

I know how does Cask works and all the benefits I can get when using it in a brand new system, but what I want to know and I don't seem to find and answer anywhere is... would it be a good idea if I delete my previous installed software and replace them with cask versions? would I see some kind of improvement, or would it be a waste of time?
There's no real advantage to reinstalling existing binaries using homebrew-cask. It's strictly a workflow improvement for when you need to install various softwares. For instance, if you wanted to have a script to install all your regularly used binaries on a new computer, that would be more efficient than manually visiting several sites and downloading, installing, etc.
Traditional software installation on some apps have automatic updates and some require the user to visit the apps website to do an update. Once the update is downloaded the user is required to click next, next, agree etc whilst it is satisfactory to do this for a few apps it can be time consuming.
One of the advantages of HBC is that it does an install without user interaction or sometimes a prompt for admin password. So if you do a reinstall of the OS you can use HBC to reinstall the additional apps.
At present there is no provision for updates using HBC so i have written scripts that take of some issues.
The scripts will create a file that lists the files to be updated including apps that are defined as latest. You can then modify the file to suit your requirements and install updates using my olinst script.
For more information visit my github.
https://github.com/pacav69/homebrew-homebrew-caskroom-offline-installer

How can I run Win32OLE calls from ubuntu?

I have some simple sinatra apps that make use of the OTA COM dll for talking to Quality Center.
I want to move those sites into docker images, so I can host them on my docker server.
It occurred to me that theoretically I should be able to get this working with strategic use of wine.
Hint: I remember reading somewhere that to get Win32OLE working in Ruby from linux you can install the windows version of ruby using wine, then run your scripts through the windows version of ruby.
https://www.ruby-forum.com/topic/88576 says
i've managed this before. i installed the one-click installer under
crossover office and the used that. another option is installing
msys, compiling ruby under that, and then using that ruby. in any
case you need to install/build another ruby under the crossover environment.
and later
In the end I installed office 2000 with Crossover, then I used the
windows installer to install windows ruby into the same bottle as
office. Finally I put the following bash script in my /usr/bin directory
so I can run my ruby files with '#> wruby some_script.rb'
==/usr/bin/wruby
#!/usr/bin/env ruby
`/opt/cxofficebeta/bin/wine --bottle myBottle --cx-app ruby.exe #{ARGV.join(" ")}`
I know nothing about Wine or crossover or bottles(?), so I'm out of my depth.
How would I do this? What would a Dockerfile I could use as a base image look like?
Note: I found some docker images that claim to install wine (which may make a good starting point)
https://registry.hub.docker.com/u/ambakshi/wine-x11-vcpython27/
https://registry.hub.docker.com/u/monokrome/wine/
https://registry.hub.docker.com/u/yantis/wine/
http://www.perlmonks.org/?node_id=430194 talks about getting Win32::OLE working under ubuntu.
Don't forget to use a USER xx in your Dockerfile as it is important to use a non privileged user in wine. You will find in registry.hub.docker.com several examples of wine with such a user.

Scripting VirtualBox and isolating from existing installation

I am trying to create an application that runs on windows. I want this application to download a "disk image" from the network (from pre-assigned server) and create a virtual machine based on it. This VM would run for a specified number of hours and then shutdown.
I want to use VirtualBox by scripting it. I found VBoxManage command and it seems to be what I am looking for. However, it seems that VirtualBox tools store their configuration as XML files in User home directory. I did learn that i can change the value of VBOX_USER_HOME environment variable to control where they are stored. However, I am not sure whether this is enough.
My problem is that the user may already have installed VirtualBox on his/her computer. I do not want my application code (and it's packaged VirtualBox binaries and conf) to mess with the existing installation.
How do I cleanly isolate my application specific VirtualBox binaries and configuration from the potentially pre-existing installed VirtualBox setup? (Even if both instances of VirtualBox binaries are being used at the same time)
I chose VirtualBox because of it's open source license and applicability of commercial use (if I compile my own binaries from the source) and because it works on Windows too (heard QEMU support for windows is still not stable). Will VirtualBox suffice for my use-case or should I look elsewhere?
Thanks for reading so far :)
If the VBoxManage command really does rely on the environment variable VBOX_USER_HOME then you could write your scripts to change the environment variable to reflect your deployment for the execution of that script and its children, staying away from user data.
Check out the VirtualBox SDK http://download.virtualbox.org/virtualbox/SDKRef.pdf

Can I use RVM to maintain a single version of Ruby for all users?

I love RVM. I realize that the main use case for it is letting different users switch between different versions of Ruby. But let's say I'm deploying a Rails app to a server and I just want a single version of Ruby running. In particular, I want 1.9.2, which is a breeze to install with RVM but a pain without it. Is there a way that I can say "I want this to be the canonical Ruby installation for all users" (along with all of its gems) without having to create a bunch of symlinks by hand and change them every time I update to a newer Ruby release?
Install RVM as root and do a sudo rvm use 1.9.2 --default. Any user sourcing /usr/local/rvm/scripts/rvm will per default have 1.9.2.
I know this doesn't quite answer your question, but:
I ran into several problems with installing RVM globally and resorted to using one user account for deployment and for all Ruby / Rails processes -- that users account exists on all dev and production servers, and the .rvm directory is rsync'ed from one dev-server to all other servers.
How many different users on your App servers do really need to access Ruby 1.9.2?
Can't you just trim that down to just one user? That worked best for me.
Note:
One thing you probably want to avoid is to install RVM on your app server(s) manually and then install Ruby and Gems on the app server ... you don't want to keep tools like cc lying around on your production servers for security reasons! rsync'ing the .rvm directory is far safer! and the result is far more consistent!

What Subversion clients for Windows are there that do not need installation?

A colleague of mine agreed to using Subversion (SVN) for our little project, but only if he doesn't have to install it. He has a U3 USB stick where he keeps the project files and he would like the SVN client to live there as well. I tried searching for a non-installable SVN client, but couldn't find anything (although I suspect that many of the available clients would run if just copy-pasted from an installation folder). What can be recommended?
I'd really like to get version control going. It would be best if it had a GUI for merging files too, not just the command line.
Added: The copy-paste from an existing installation is one solution, but I'd like to see first if there perhaps isn't some client that does not require installation by design. If not, I guess RapidSVN is nice enough (although it does leave stuff in Windows registry).
Try RapidSVN. The CollabNet binaries can be used in a similar fashion for command-line support. Yes, these have installers, but you can simply copy the binaries around -- I use Universal Extractor to get the binaries out without having to run the installer.
Also, an enterprising user has packaged RapidSVN as a PortableApp. There is an "installer", but it really just unzips things into a directory of your choice and writes a default configuration file into that directory.
Try Alagazam.net's Subversion Windows Installer. There is also a version with just the binaries without an installer.
I'd go with the copy and paste the bin folder from SlikSVN.
It seems like SlikSVN is the underlying platform behind several graphical SVN clients. In my experience it seems stable and reliable.
Specifically, the bottom link on this page seems to be a non-install/xcopy precompiled package (although I haven't tried this one myself, only inspected it). It does not appear to be the newest, though. You might do your friend a favour by installing the newest SlikSVN on your own computer, and then share the bin files with your codeveloper.
If Java is available on the machines you could use SVNKit.
There's a portable version of SmartSVN which is what I use. It's a pretty good SVN client, but it needs JRE. It has a nice GUI and all.
There is a portable version of RapidSVN here. Just install it to a flash drive.
I was able to use the command line client that I had installed onto a USB stick. I then whipped up a couple batch files that did the basic checkout, checkin stuff, and one batch file that gave me a command prompt with a PATH set.
It doesn't have all the integration of something like TortoiseSVN, but I don't think you would be able to easily do that from a USB stick.
I've had this same problem, and thought it would be easier to find than it is. Bert Huijben posted the solution as a reply to Cecil, but his link was outdated.
http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=8100
Scroll to the bottom where you can grab a ZIP file of the binaries. It works for me.
Alternative two should be pretty sufficient. But both methods requires installing it to the USB device which I guess is similar to just copying onto it. I checked Wikipedia and there are some standalone listed there.
SmartSVN, QSvn (portable version requires install), and Syncro SVN Client (they have versions which requires you to extract and run), etc. But does it copy, and does it run any different than installing to the USB?
Alternative One
Load Cygwin on the USB device, install SVN support and run it off of that. There isn’t any up (which I assume is more than possible) since I've had the luxury of using TortoiseSVN (requires install).
Alternative Two
Install TortoiseSVN on a USB device and use if off of that. It has a GUI interface for merging and diff. This may be relevant to your interest. However, Google has some results indicting they are slow.
Finally, there is an PortableApps version of RapidSVN:
Another alternative which may be acceptable to some users:
The Eclipse IDE is portable (not entirely; it depends on Java). Use the Eclipse SVN plugin (Subversive or Subclipse). This takes care of the daily needs.
You may choose to point to a Java Portable installation to make it truly portable. However, I believe it might be slow to run off a USB pen drive.

Resources