Useiden nettisivujen mukaan pitäisi olla viiden minuutin homma saada Rails-applikaatio vietyä Openshiftiin. Kaksi työpäivää taisteltuani taidan olla nyt voiton puolella. Yritän nyt parhaani mukaan listata kaikki stepit, jotka vaadittiin:
Asensin rhc työkalut.
Loin web consolen kautta uuden Ruby 1.9 -applikaation, johon liitin MySQL 5.5-cartridgen.
Git
Loin omalla koneella uuden tyhjän hakemiston, jonka kai jotenkin liitin Gitillä Openshiftin repositoryyn. Ehkä näin (voi olla että tässä kohdassa vasta loin hakemiston, nyt en ihan muista):
git clone <git_url> <directory to create>
Git url löytyi Openshift web consolesta, pitkä merkkijono joka alkaa ssh://.
Kopioin paikalliset rails-koodini uuteen hakemistoon ja tein git-jutut:
git add .
git commit -m "A checkin to my application"
git remote add openshift <git_url>
git push -f --set-upstream openshift master
Käytin myös pelkkää git push käskyä sekä git push openshift master. En vielä tiedä gitistä tarpeeksi ymmärtääkseni mitä tuli tehtyä.
Git valitti monessa kohdassa että .bundle pitäisi poistaa reposta. Käytin käskyä
git rm --cached -r <mydirectory>
ja laitoin myös sen .gitignore tiedostoon
Gemfile
Lisäsin
gem 'sqlite3', '~> 1.3.11', :group => [:development, :test]
gem 'mysql2', '0.3.18', :group => [:production]
# MultiJson::AdapterError ???
gem 'multi_json', '1.7.8'
gem 'net-ssh', '2.9.2'
Joistakin gemeistä jouduin laittamaan kiinteän versionumeron.
Gemfile.lock
Joidenkin versionumeroiden perään oli generoitu platform-tieto, se piti siivota, vaikkei lock-tiedostoon normaalisti pidä kajota.
database.yml
default: &default
adapter: mysql2
pool: 5
timeout: 5000
development:
<<: *default
adapter: sqlite3
database: db/development.sqlite3
# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
<<: *default
database: db/test.sqlite3
production:
adapter: mysql2
database: "<%=ENV['OPENSHIFT_APP_NAME']%>"
username: "<%=ENV['OPENSHIFT_MYSQL_DB_USERNAME']%>"
password: "<%=ENV['OPENSHIFT_MYSQL_DB_PASSWORD']%>"
host: <%=ENV['OPENSHIFT_MYSQL_DB_HOST']%>
port: <%=ENV['OPENSHIFT_MYSQL_DB_PORT']%>
secrets.yml
Piti luoda salainen avain käskyllä
rake secret
ja laittaa sen arvo ympäristömuuttujaan
rhc set-env SECRET_KEY_BASE=3dc8b0885b3043c0e38aa2e1dc64******************** -a <myapp>
Sitten secrets.yml tiedostoon tuli lisäys
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
config.ru
Sisältö piti muokata tällaiseksi
# This file is used by Rack-based servers to start the application.
require ::File.expand_path('../config/environment', __FILE__)
run Rails.application
\.openshift\action_hooks\deploy
#!/bin/bash
pushd ${OPENSHIFT_REPO_DIR} > /dev/null
bundle exec rake db:migrate RAILS_ENV="production"
popd > /dev/null
bundle update
Gemejä piti päivittää tällä käskyllä, että sai production databasen käyttöön:
bundle update --without test development
Tietokanta piti ottaa käyttöön ssh-konsolissa jommalla kummalla käskyllä (riippuu varmaan versioista)
RAILS_ENV=production rake db:setup
bundle exec rake db:setup RAILS_ENV=production
Olin myös sotkenut jotenkin gemien asennushakemiston paikan niin ettei tietokantagemejä enää löytynyt, mutta sain palautettua tilanteen ssh-konsolissa käskyllä
bundle install --system
Lisäyksiä:
1.
Kun applikaation poistaa ja luo uudelleen, vanha git-repository saattaa jotenkin jäädä osoittamaan kuitenkin vanhaan paikkaan. Minulla ongelma näytti siltä, että pystyin luomaan ssh-yhteyden serverille, mutta git push ei toiminut vaan valitti joko salausavaimista tai että repositoryä ei löydy.
Repositoryjen osoitteet näkee ajamalla käskyn
git remote -v
jolloin huomattiin, että osoite oli eri kuin mikä Openshiftin konsolissa näkyi. Se korjattiin näin:
git remote remove origin
git remote add origin ssh://<uusiosoite>
2.
gem install rack
jolloin versio päivitti serverin version 1.6.4:ään.