diff --git a/.gitignore b/.gitignore index b40ef7d4..6285985f 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,9 @@ # or operating system, you probably want to add a global ignore instead: # git config --global core.excludesfile ~/.gitignore_global +# Vagrant stuff +/.vagrant + # Ignore bundler config /.bundle diff --git a/Gemfile b/Gemfile index 8ce9f8fa..a468b307 100644 --- a/Gemfile +++ b/Gemfile @@ -53,4 +53,6 @@ end gem 'jquery-rails' gem 'jquery-ui-rails' -gem 'crowdtilt', github: 'msaint/crowdtilt' +gem "therubyracer", :require => 'v8' + +gem 'crowdtilt' diff --git a/Gemfile.lock b/Gemfile.lock index 9b1ae983..298fc30f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,13 +1,3 @@ -GIT - remote: git://github.com/msaint/crowdtilt.git - revision: faa74632ac6c5b35f44b289e8e04252a7297f68d - specs: - crowdtilt (0.0.1) - activesupport - faraday (~> 0.8, < 0.10) - faraday_middleware (~> 0.9.0) - json - GEM remote: https://rubygems.org/ specs: @@ -73,6 +63,11 @@ GEM coffee-script-source execjs coffee-script-source (1.6.2) + crowdtilt (1.0.0) + activesupport + faraday (~> 0.8, < 0.10) + faraday_middleware (~> 0.9.0) + json devise (2.2.4) bcrypt-ruby (~> 3.0) orm_adapter (~> 0.1) @@ -94,8 +89,8 @@ GEM railties (>= 3.0.0) faker (1.1.2) i18n (~> 0.5) - faraday (0.8.7) - multipart-post (~> 1.1) + faraday (0.8.8) + multipart-post (~> 1.2.0) faraday_middleware (0.9.0) faraday (>= 0.7.4, < 0.9) fog (1.11.1) @@ -127,6 +122,7 @@ GEM kgio (2.8.0) launchy (2.3.0) addressable (~> 2.3) + libv8 (3.16.14.3) mail (2.5.4) mime-types (~> 1.16) treetop (~> 1.4.8) @@ -182,6 +178,7 @@ GEM rake (10.0.4) rdoc (3.12.2) json (~> 1.4) + ref (1.0.5) rspec-core (2.13.1) rspec-expectations (2.13.0) diff-lcs (>= 1.1.3, < 2.0) @@ -211,6 +208,9 @@ GEM multi_json (~> 1.0) rack (~> 1.0) tilt (~> 1.1, != 1.3.0) + therubyracer (0.12.0) + libv8 (~> 3.16.14.0) + ref thor (0.18.1) tilt (1.4.1) treetop (1.4.14) @@ -241,7 +241,7 @@ DEPENDENCIES capybara ckeditor coffee-rails (~> 3.2.1) - crowdtilt! + crowdtilt devise email_spec factory_girl_rails @@ -261,5 +261,6 @@ DEPENDENCIES rspec-rails sass-rails (~> 3.2.3) shoulda + therubyracer uglifier (>= 1.0.3) unicorn diff --git a/Vagrantfile b/Vagrantfile new file mode 100644 index 00000000..e8ecf72d --- /dev/null +++ b/Vagrantfile @@ -0,0 +1,114 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +Vagrant.configure("2") do |config| + # All Vagrant configuration is done here. The most common configuration + # options are documented and commented below. For a complete reference, + # please see the online documentation at vagrantup.com. + + # Every Vagrant virtual environment requires a box to build off of. + config.vm.box = "precise64" + + # The url from where the 'config.vm.box' box will be fetched if it + # doesn't already exist on the user's system. + config.vm.box_url = "http://files.vagrantup.com/precise64.box" + + config.vm.provision :shell, :path => "script.sh" + + # Create a forwarded port mapping which allows access to a specific port + # within the machine from a port on the host machine. In the example below, + # accessing "localhost:8080" will access port 80 on the guest machine. + # config.vm.network :forwarded_port, guest: 80, host: 8080 + config.vm.network :forwarded_port, guest: 5000, host: 5050 + + # Create a private network, which allows host-only access to the machine + # using a specific IP. + # config.vm.network :private_network, ip: "192.168.33.10" + + # Create a public network, which generally matched to bridged network. + # Bridged networks make the machine appear as another physical device on + # your network. + # config.vm.network :public_network + + # Share an additional folder to the guest VM. The first argument is + # the path on the host to the actual folder. The second argument is + # the path on the guest to mount the folder. And the optional third + # argument is a set of non-required options. + # config.vm.synced_folder "../data", "/vagrant_data" + + # Provider-specific configuration so you can fine-tune various + # backing providers for Vagrant. These expose provider-specific options. + # Example for VirtualBox: + # + # config.vm.provider :virtualbox do |vb| + # # Don't boot with headless mode + # vb.gui = true + # + # # Use VBoxManage to customize the VM. For example to change memory: + # vb.customize ["modifyvm", :id, "--memory", "1024"] + # end + # + # View the documentation for the provider you're using for more + # information on available options. + + # Enable provisioning with Puppet stand alone. Puppet manifests + # are contained in a directory path relative to this Vagrantfile. + # You will need to create the manifests directory and a manifest in + # the file base.pp in the manifests_path directory. + # + # An example Puppet manifest to provision the message of the day: + # + # # group { "puppet": + # # ensure => "present", + # # } + # # + # # File { owner => 0, group => 0, mode => 0644 } + # # + # # file { '/etc/motd': + # # content => "Welcome to your Vagrant-built virtual machine! + # # Managed by Puppet.\n" + # # } + # + # config.vm.provision :puppet do |puppet| + # puppet.manifests_path = "manifests" + # puppet.manifest_file = "init.pp" + # end + + # Enable provisioning with chef solo, specifying a cookbooks path, roles + # path, and data_bags path (all relative to this Vagrantfile), and adding + # some recipes and/or roles. + # + # config.vm.provision :chef_solo do |chef| + # chef.cookbooks_path = "../my-recipes/cookbooks" + # chef.roles_path = "../my-recipes/roles" + # chef.data_bags_path = "../my-recipes/data_bags" + # chef.add_recipe "mysql" + # chef.add_role "web" + # + # # You may also specify custom JSON attributes: + # chef.json = { :mysql_password => "foo" } + # end + + # Enable provisioning with chef server, specifying the chef server URL, + # and the path to the validation key (relative to this Vagrantfile). + # + # The Opscode Platform uses HTTPS. Substitute your organization for + # ORGNAME in the URL and validation key. + # + # If you have your own Chef Server, use the appropriate URL, which may be + # HTTP instead of HTTPS depending on your configuration. Also change the + # validation key to validation.pem. + # + # config.vm.provision :chef_client do |chef| + # chef.chef_server_url = "https://api.opscode.com/organizations/ORGNAME" + # chef.validation_key_path = "ORGNAME-validator.pem" + # end + # + # If you're using the Opscode platform, your validator client is + # ORGNAME-validator, replacing ORGNAME with your organization name. + # + # If you have your own Chef Server, the default validation client name is + # chef-validator, unless you changed the configuration. + # + # chef.validation_client_name = "ORGNAME-validator" +end diff --git a/post_provision.sh b/post_provision.sh new file mode 100644 index 00000000..c40f65cc --- /dev/null +++ b/post_provision.sh @@ -0,0 +1,8 @@ +#Manual commands to run on start +cd /vagrant +sudo rvm install ruby-1.9.3-p448 +source /usr/local/rvm/scripts/rvm +rvm use 1.9.3 --default +bundle install +foreman run rake db:setup +#foreman start \ No newline at end of file diff --git a/script.sh b/script.sh new file mode 100644 index 00000000..d5f33f0d --- /dev/null +++ b/script.sh @@ -0,0 +1,110 @@ +# postinstall.sh created from Mitchell's official lucid32/64 baseboxes + +date > /etc/vagrant_box_build_time + +# Apt-install various things necessary for Ruby, guest additions, +# etc., and remove optional things to trim down the machine. +apt-get -y update +apt-get -y upgrade +apt-get -y -f install +apt-get -y install curl +apt-get -y install linux-headers-$(uname -r) build-essential +apt-get -y install zlib1g-dev libssl-dev libreadline5-dev +apt-get -y install git-core vim + +# Setup sudo to allow no-password sudo for "admin" +cp /etc/sudoers /etc/sudoers.orig +sed -i -e '/Defaults\s\+env_reset/a Defaults\texempt_group=admin' /etc/sudoers +sed -i -e 's/%admin ALL=(ALL) ALL/%admin ALL=NOPASSWD:ALL/g' /etc/sudoers + +# Install NFS client +apt-get -y install nfs-common + +# Install Foreman +/opt/ruby/bin/gem install foreman --no-ri --no-rdoc + +# Install PostgreSQL 9.2.4 +wget http://ftp.postgresql.org/pub/source/v9.2.4/postgresql-9.2.4.tar.bz2 +tar jxf postgresql-9.2.4.tar.bz2 +cd postgresql-9.2.4 +./configure --prefix=/usr +make world +make install +cd .. +rm -rf postgresql-9.2.4* + +# Initialize postgres DB +useradd -p postgres postgres +mkdir -p /var/pgsql/data +chown postgres /var/pgsql/data +su -c "/usr/bin/initdb -D /var/pgsql/data --locale=en_US.UTF-8 --encoding=UNICODE" postgres +mkdir /var/pgsql/data/log +chown postgres /var/pgsql/data/log + +# Start postgres +su -c '/usr/bin/pg_ctl start -l /var/pgsql/data/log/logfile -D /var/pgsql/data' postgres + +# Start postgres at boot +sed -i -e 's/exit 0//g' /etc/rc.local +echo "su -c '/usr/bin/pg_ctl start -l /var/pgsql/data/log/logfile -D /var/pgsql/data' postgres" >> /etc/rc.local + +# Add /opt/ruby/bin to the global path as the last resort so +# Ruby, RubyGems, and Chef/Puppet are visible +echo 'PATH=$PATH:/opt/ruby/bin' > /etc/profile.d/vagrantruby.sh + +# Installing vagrant keys +mkdir /home/vagrant/.ssh +chmod 700 /home/vagrant/.ssh +cd /home/vagrant/.ssh +wget --no-check-certificate 'https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub' -O authorized_keys +chmod 600 /home/vagrant/.ssh/authorized_keys +chown -R vagrant /home/vagrant/.ssh + +# Zero out the free space to save space in the final image: +dd if=/dev/zero of=/EMPTY bs=1M +rm -f /EMPTY + +# Removing leftover leases and persistent rules +echo "cleaning up dhcp leases" +rm /var/lib/dhcp3/* + +# Make sure Udev doesn't block our network +# http://6.ptmc.org/?p=164 +echo "cleaning up udev rules" +rm /etc/udev/rules.d/70-persistent-net.rules +mkdir /etc/udev/rules.d/70-persistent-net.rules +rm -rf /dev/.udev/ +rm /lib/udev/rules.d/75-persistent-net-generator.rules + +# Install Heroku toolbelt +wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh + +# Install some libraries +apt-get -y install libxml2-dev libxslt-dev curl libcurl4-openssl-dev +apt-get -y install imagemagick libmagickcore-dev libmagickwand-dev +apt-get clean + +# Set locale +echo 'LC_ALL="en_US.UTF-8"' >> /etc/default/locale + +# Add 'vagrant' role +su -c 'createuser vagrant -s' postgres + +# Install RVM, ruby 1.9.3, and the Rails gem +echo 'Adding RVM, ruby, and the Rails gem' +\curl -L https://get.rvm.io | bash -s stable --rails --ruby=1.9.3 + +echo "Adding a 2 sec delay to the interface up, to make the dhclient happy" +echo "pre-up sleep 2" >> /etc/network/interfaces +exit +exit + +#Manual commands to run on start +#cd /vagrant +#sudo rvm install ruby-1.9.3-p448 +#source /usr/local/rvm/scripts/rvm +#rvm use 1.9.3 --default +#bundle install +#foreman run rake db:create +#foreman run rake db:migrate +#foreman start \ No newline at end of file