Hab es endlich geschafft, das Multimedia-Tool Pageflow auf meinem Hoster Uberspace zu installieren. Hier sind meine Installationsnotizen, auf Grundlage der Original-Anleitung, die natürlich anders ist, weil es dort um einen Root-Server geht. Meine Notizen sind allerdings mit Vorbehalt zu benutzen. Ich habe keine Ahnung von Ruby on Rails und schon gar nicht von dem, was ich da in die Shell eingegeben habe.
Ruby 1.9.3 aktivieren
[rufpost@vega ~]$ cat <<'__EOF__' >> ~/.bash_profile > export PATH=/package/host/localhost/ruby-1.9.3/bin:$PATH > export PATH=$HOME/.gem/ruby/1.9.1/bin:$PATH > __EOF__ [rufpost@vega ~]$ . ~/.bash_profile
Rails installieren
[rufpost@vega ~]$ export LANG=en_US.UTF-8
[rufpost@vega ~]$ gem install --user-install --version 4.0.2 rails
Gems immer lokal ausführen:
[rufpost@vega ~]$ echo "gem: --user-install --no-rdoc --no-ri" > ~/.gemrc
Projekt anlegen
[rufpost@vega ~]$ rails new pf_test --skip-bundle --database=mysql
[rufpost@vega ~]$ cd pf_test
Bundler konfigurieren
[rufpost@vega pf_test]$ bundle config path ~/.gem
Pfad für SQLite ändern (Ist das nötig? Besser mal machen)
$ bundle config build.sqlite3 \
--with-sqlite3-include=/package/host/localhost/sqlite-3/include \
--with-sqlite3-lib=/package/host/localhost/sqlite-3/lib
An die Datei „Gemfile“ folgende Zeilen anhängen
gem 'pageflow' gem 'activeadmin', :git => 'https://github.com/codevise/active_admin.git', :branch => 'rails4' gem 'ransack' gem 'inherited_resources', '1.4.1' gem 'formtastic', '2.3.0.rc2' # Danke an Jonas Pasche von Uberspace für diesen Fix! gem 'resque-scheduler', '~> 2.5.5'
Pageflow installieren
[rufpost@vega pf_test]$ bundle install
[rufpost@vega pf_test]$ bundle exec rails generate pageflow:install
Die Datenbank-Konfiguration editieren – sie liegt in der Datei ~/pf_test/config/database.yml
. Braucht man wirklich Test und Development? Hab sie mal mit angelegt.
development: adapter: mysql2 encoding: utf8 database: rufpost_pf_development pool: 5 username: rufpost password: *** socket: /var/lib/mysql/mysql.sock test: adapter: mysql2 encoding: utf8 database: rufpost_pf_test pool: 5 username: rufpost password: *** socket: /var/lib/mysql/mysql.sock production: adapter: mysql2 encoding: utf8 database: rufpost_pf_production pool: 5 username: rufpost password: *** socket: /var/lib/mysql/mysql.sock
Redis aufsetzen
[rufpost@vega ~]$ uberspace-setup-redis
Die eine Zeile in der Datei ~/pf_test/config/initializers/resque.rb
wir folgt ändern bzw. auskommentieren:
# Resque.redis = ENV.fetch('REDIS_URL', 'localhost:6379')
Resque.redis = Redis.new(:path => "/home/rufpost/.redis/sock")
Redis läuft nun als Daemon. Wenn irgendwas schief läuft, kann man den Dienst wie folgt neu starten:
[rufpost@vega ~]$ svc -du ~/service/redis
Environment auswählen
[rufpost@vega pf_test]$ export RAILS_ENV=production
Datenbank erstellen und befüllen (kein Ahnung, ob man das Environment bei allen angeben muss, aber bei dem Teil gab es immer Probleme):
[rufpost@vega pf_test]$ bundle exec rake db:create RAILS_ENV=production
[rufpost@vega pf_test]$ bundle exec rake db:migrate RAILS_ENV=production
[rufpost@vega pf_test]$ bundle exec rake db:seed RAILS_ENV=production
Pfad zum ausführen von Gems via Shell angeben
export PATH=$HOME/.gem/bin:$PATH
Passenger lokal installieren, also nach /home/rufpost/.gem/ruby/1.9.1/gems
[rufpost@vega ~]$ cd ..
[rufpost@vega ~]$ gem install passenger
Subdomain Ordner anlegen
[rufpost@vega ~]$ cd /var/www/virtual/rufpost
[rufpost@vega ~]$ mkdir pageflow.rufposten.de
.htaccess in diesem Subdomain-Ordner anlegen, diesen Text erstellen. Vorher eine eigene Portnummer auswählen und auf Verfügbarkeit testen
RewriteEngine On
RewriteRule (.*) http://localhost:00000/$1 [P]
Subdomain registrieren
[rufpost@vega ~]$ uberspace-add-domain -d pageflow.rufposten.de -w
Optional: Stylesheets etc. für den Production-Server prekompilieren … sonst funktioniert das Layout nur auf Development
rake assets:precompile
Passenger testweise im Projectverzeichnis starten. Dabei natürlich die oben selbst gewählte Portnummer verwenden.
[rufpost@vega pf_test]$ passenger start --port 00000
Falls vorher noch nicht geschehen: Dienste bei deinem Uberspace aktivieren:
[rufpost@vega ~]$ uberspace-setup-svscan
Passenger als Dienst einrichten
[rufpost@vega ~]$ uberspace-setup-service mein_passenger ~/.gem/ruby/1.9.1/bin/passenger
Den Aufruf des Dienstes noch mit Verzweichniswechsel, Environment und deinem Port ergänzen. Dazu den letzten Abschnitt der Datei ~/service/mein_passenger/run wie folgt ergänzen/editieren:
# Now let's go!
export RAILS_ENV=production
cd ~/pf_test/
exec /home/rufpost/.gem/ruby/1.9.1/bin/passenger start --port 00000 2>&1
Endlich! Pageflow starten. Sollte nun unter der Subdomain aufrufbar sein.
[rufpost@vega]$ svc -du ~/service/mein_passenger
Resque wird von Pageflow nach dem Hochladen von Multimediadateien benötigt, bevor die Videos an Amazon und dann an Zencoder rausgehen. Da die Dienste nicht zum Abrufen der Reportagen, sondern nur beim Hochladen von neuen Dateien benötigt werden, habe ich es mir einfach gemacht und starte beide händisch in jeweils einem eigenen Shell-Fenster, bevor ich eine Reportage bearbeite.
[rufpost@vega pf_test]$ QUEUE=* rake resque:work RAILS_ENV=production
[rufpost@vega pf_test]$ QUEUE=* rake resque:scheduler RAILS_ENV=production
Amazon S3 und Zencoder anlegen und konfigurieren. Bei Amazon AWS Account anlegen und für jedes Environment zwei Buckets erstellen
Der Anleitung weiter folgen und die Buckets konfigurieren.
Die Namen der Buckets, das AWS-Host-Alias (wird bei AWS unter „Properties/Static website/Hosting/Endpoint:“) angezeigt und die AWS-Keys in die Datei ~/pf_test/config/initializers/pageflow.rb eintragen
. Dabei aufpassen, dass sich keine Leerzeichen vor und nach den Keys einschleichen. Den S3 Hostname sollte man nicht ändern, wenn man in Europa hostet, siehe auch dieser Forenbeitrag.
Anschließend bei Zencoder.com anmelden und dort eine Bezahlform wählen (es gibt auch einen Test-Account, bei dem die Videos nach fünf Sekunden abbrechen). Den Zencoder-Api-Key ebenfalls in die pageflow.rb eintragen. Amazon Cloudfront wird für Production NICHT benötigt.
Leave a Reply