AZ's Blog » Ruby https://azapps.de Einmal mit Profis arbeiten… Sat, 28 Jun 2014 13:46:52 +0000 de-DE hourly 1 http://wordpress.org/?v=4.2.4 Phusion Passenger und Apache mit Debian https://azapps.de/blog/2013/01/03/phusion-passenger-und-apache-mit-debian/ https://azapps.de/blog/2013/01/03/phusion-passenger-und-apache-mit-debian/#comments Thu, 03 Jan 2013 18:49:06 +0000 https://azapps.de/?p=284 Debian… dieser Hort uralter Software – Aber man muss es halt nutzen. In den Debian–Stable repos ist Ruby 1.8. eingetragen. Aktuell ist aber Ruby 1.9.3. Die Installation von Rails und vor allem dem Phusion Passenger gestaltete sich für mich ziemlich schwierig. Wie es trotzdem klappt, kannst du hier nachlesen.

Ruby installieren

Die Ruby–Version aus der Paketverwaltung kann man wie gesagt vergessen. Also müssen wir rvm nutzen. Am praktischsten ist es, rvm gleich Systemweit zu installieren:

curl -L https://get.rvm.io | sudo bash -s stable

Wichtig ist hier, den Befehl nicht als Root, sondern mit sudo auszuführen, weil rvm einige Variablen benötigt, die mit root anders gesetzt sind
Dann installierst du dir die aktuelle Ruby–Version:

rvm install 1.9.3
rvm use 1.9.3

Nun habe ich mir meine Rails–Applikation geholt und die benötigten Gems mit

bundle install

installiert.

Phusion Passenger einrichten

Passanger installieren:

gem install passenger

Nun muss noch das Modul für Apache installiert werden:

rvmsudo /usr/local/rvm/gems/ruby-1.9.3-p362/gems/passenger-3.0.18/bin/passenger-install-apache2-module

Den Pfad zur Installation musst du Gegebenenfalls anpassen.
Jetzt nur noch die Apache Konfiguration anpassen und danach kann es losgehen:

Füge folgende Zeilen am Ende der /etc/apache2/apache.conf (o.ä.) hinzu:

   LoadModule passenger_module /usr/local/rvm/gems/ruby-1.9.3-p362/gems/passenger-3.0
.18/ext/apache2/mod_passenger.so
   PassengerRoot /usr/local/rvm/gems/ruby-1.9.3-p362/gems/passenger-3.0.18
   PassengerRuby /usr/local/rvm/wrappers/ruby-1.9.3-p362/ruby

Dann erstellst du einen neuen Virtuellen Host: (z.B. /etc/apache2/sites-enabled/yourhost.com.conf)

   <VirtualHost *:80>
      ServerName www.yourhost.com
      # !!! Be sure to point DocumentRoot to 'public'!
      DocumentRoot /somewhere/public    
      <Directory /somewhere/public>
         # This relaxes Apache security settings.
         AllowOverride all
         # MultiViews must be turned off.
         Options -MultiViews
      </Directory>
   </VirtualHost>

Danach musst du die Seite aktivieren und dann Apache neu laden (oder neu starten):

sudo a2ensite yourhost.com.conf
sudo service apache2 restart

Anwendung vorbereiten

Wenn noch nicht getan, solltest du genau jetzt

bundle install

durchführen. Danach erstellen wir die Datenbank und kompilieren die Assets vor:

rake db:migrate RAILS_ENV="production"
bundle exec rake assets:precompile

Wenn du nun deine Seite aufrufst, sollte alles Funktionieren. Wenn eine Leere Seite mit irgendwas mit „Sorry“ kommt, schau in deinen Logs nach: /var/log/apache2/error.log Wenn eine Phusion–Passanger–Fehlerseite kommt, dann lies nach, was dort steht.

Mehr dazu unter…

]]>
https://azapps.de/blog/2013/01/03/phusion-passenger-und-apache-mit-debian/feed/ 0
PDF Export mit Rails und LaTeX https://azapps.de/blog/2012/11/14/pdf-export-mit-rails-und-latex/ https://azapps.de/blog/2012/11/14/pdf-export-mit-rails-und-latex/#comments Wed, 14 Nov 2012 19:19:33 +0000 https://azapps.de/?p=159 Für ein Praktikum an der Uni sollte ich mir überlegen, wie man am besten mit Rails einen PDF-Export realisiert. Ich habe mich im Endeffekt für die Kombination von LaTeX und dem Gem rails-latex entschieden. Wieso und wie die Implementierung aussieht liest du weiter unten.

Grundlegendes

Es gibt eigentlich drei Arten wie man mit Rails relativ einfach PDF’s generiert. Alle haben ihre Vor- und Nachteile, deshalb musst du selbst entscheiden, ob meine Lösung auch in deinem Fall die beste ist.

HTML zu PDF–Konverter

Die gibt es, die gibt es auch für Rails. Die Vorteile liegen auf der Hand:

  • Du kannst HTML, also ist es einfach zu schreiben
  • Du musst dich nirgendwo einarbeiten

Doch die Nachteile überwiegen:

  • Diese Konverter sind meistens ziemlich langsam
  • Man kann wenige PDF-Spezielle Sachen machen (z.B. Kopf– und Fußzeilen)

Prawn oder ein anderer In–Ruby–PDF–Generator

Du schreibst Rails–Code direkt in deiner Anwendung und lässt dir von dem Gem einfach das PDF generieren.

Vorteile:

  • Man muss keine externen Programme aufrufen
  • Man kann den Code in Ruby schreiben und muss nichts neues lernen

Nachteile:

  • Der PDF-Generierungscode ist meistens ziemlich schlecht überschaubar
  • Anpassungen sind relativ schwer vorzunehmen
  • Nicht wiederverwendbar für andere Dokumente

LaTeX

Du generierst mit Rail LaTeX-Code, jagst diesen durch den LaTeX–Parser und bietest die PDF zum Download an.

Vorteile:

  • Portabler Code
  • LaTeX kann auch jemand schreiben, der vom Programmieren sonst keine Ahnung hat
  • Viele Anpassungsmöglichkeiten (Du kannst auch gleich eine Präsentation schreiben)

Nachteile:

  • LaTeX muss installiert sein und LaTeX ist groß…

Umsetzung

Am entspannten ist es wohl, wenn man den Gem rails-latex benutzt. Füge es in das Gemfile hinzu:

gem rails-latex

Danach natürlich mit bundle install installieren.

Damit Rails weiß, wie es PDF-Anfragen handhabhaben soll, musst du noch in der config/initializers/mime_types.rb den Mimetype setzen:

Mime::Type.register "application/pdf", :pdf, ['text/pdf'], ['pdf']

Der Rest ist ziemlich simpel gestalten:

Wenn du einen Link auf eine PDF-Datei setzen willst, tust du dies folgendermaßen:

<%= link_to "print", story_path(@story,:format => :pdf) %>

Weiterhin solltest du dir passende Views anfertigen:

  • app/views/layouts/application.pdf.erbtex
  • app/views/[view]/[seite].pdf.erb

Dort kannst du ganz normalen LaTeX–Code mit Embedded Ruby schreiben.

Wenn du willst, dass pdflatex 2 mal läuft kannst du das in der application.pdf.erbtex einstellen:

<% @latex_config={:parse_twice => true} %>

 Fehlerbehebung

Der PDF-Viewer zeigt nichts an, oder sagt, das PDF ist ungültig? Schau doch mal nach, was der Server antwortet.

Bei mir kam lange Zeit ein 406 Not Acceptable Fehler. Der Grund daran liegt an den respond_to – Blöcken in den Controllern. Warum genau weiß ich nicht, schau doch einfach in die Dokumentation und sag mir Bescheid 😉

Das zu beheben war ganz einfach: Lösche die Blöcke, die sind überflüssig.

Lesenswertes

]]>
https://azapps.de/blog/2012/11/14/pdf-export-mit-rails-und-latex/feed/ 0