Sebastians Blog Neues aus den Softwareminen…

Neuste Beiträge

Rails 4: Already initialized constant APP_PATH?

Ein Fehler, der mir in Rails-4-Projekten öfter unterkommt:

bin/rails:6: warning: already initialized constant APP_PATH

Dies deutet auf ein Problem mit Spring hin. Es kann daher helfen, die Projekt-Binaries neu zu generieren:

rake rails:update:bin

Dies ist oft schon die Lösung oder sollte zumindest eine Fehlermeldung liefern, anhand derer man das tatsächliche Problem finden kann.

Veröffentlicht unter | Verschlagwortet mit , , | Hinterlasse einen Kommentar

Suchstatus in ActiveAdmin deaktivieren

Der Suchstatus des Active-Admin-Masters funktioniert momentan fehlerhaft. Weder Scope-Namen noch Ransack-Suchen werden korrekt übersetzt.

Suchstatus in ActiveAdmin

Da ich das Konzept ohnehin nicht sonderlich gewinnbringend finde, schalte ich es zentral im Active-Admin-Initializer ab:

Wer das Konzept, wie ich, nicht sonderlich gewinnbringend und eines umständlichen Workarounds wert findet, kann es zentral im Initializer von ActiveAdmin abschalten:

# config/initializers/active_admin.rb

ActiveAdmin.setup do |config|
  # ...
  config.current_filters = false
end
Veröffentlicht unter | Verschlagwortet mit , , , | Hinterlasse einen Kommentar

ActiveAdmin: Authentifizierung für Browser und API

Eine einfache API-Authentifizierung lässt sich in ActiveAdmin durch Wiederverwendung des Standard-Admin-Users im Initializer erreichen:

 # config/initializers/active_admin.rb
 ActiveAdmin.setup do |config|
   config.prepend_before_filter do
     if active_admin_config.namespace.name == :api
       authenticate_or_request_with_http_basic('API') do |name, password|
         user = AdminUser.find_by_email!(name)
         sign_in(:admin_user, user) if user.valid_password?(password)
       end
     end
   end

Dies erlaubt die Angabe des Benutzernamens und Passworts im Browser als Popup (HTTP-Basic-Authentication) und als Header für APIs:

curl -u admin@example.com:password http://localhost:3000/api/my_resources.json

Weiterlesen

Veröffentlicht unter | Verschlagwortet mit , , , , , | Hinterlasse einen Kommentar

API-Namespace für ActiveAdmin

In ActiveAdmin kann man neben dem Standard weitere Namespaces definieren. Hierfür wird bei der Ressourcen-Registrierung die entsprechende Option angegeben:

# app/admin/api/my_resource.rb

ActiveAdmin.register MyResource, namespace: :api do
 # ...

Das Namespace-Verzeichnis kann unter app/admin abgelegt werden, ohne das „admin“ Teil der URL, des Controller-Namens o. ä. wird:

rake routes
# ...
api_my_resources GET  /api/my_resources(.:format)  api/my_resources#index
# ...
Veröffentlicht unter | Verschlagwortet mit , , , | Hinterlasse einen Kommentar

Taskwarrior-Server auf dem Pi bauen

Die meisten Schritte habe ich eins zu eins von der sehr guten Taskwarrior-Dokumentation übernommen:

sudo apt-get update
sudo apt-get install task build-essential uuid-dev
curl -O http://taskwarrior.org/download/taskd-1.1.0.tar.gz
tar xzf taskd-1.1.0.tar.gz
cd taskd-1.1.0/
cmake -DCMAKE_BUILD_TYPE=release .
make
sudo make install
Veröffentlicht unter , | Verschlagwortet mit , , | Hinterlasse einen Kommentar

SSH-Passwort als Argument

Aus Sicherheitssicht ein Graus, in einigen Situationen ein einfacher Workaround: sshpass erlaubt es, den sonst interaktiven Passwortprompt beim Anmelden mittels SSH zu überspringen:

sshpass -p 'raspberry' ssh pi@mein-pi

Auf meinem Ubuntu war es nicht dabei, befindet sich aber in den Paketquellen:

sudo apt-get install sshpass
Veröffentlicht unter | Verschlagwortet mit , , | 1 Kommentar

Idee für DB2CSV2DB

Egal welch schöne Verwaltungsoberflächen man strickt, manchmal ist es einfach angenehmer den Datenbankinhalt in den Editor zu schieben, dort zu Suchen und Ersetzen und das Ergebnis wieder in die Datenbank zu schieben. Ich denke da an einen einfachen Query-Generator, der die Tabelle als CSV in einer Textarea ausgibt und diese direkt als Update akzeptiert:

db2csv2db

Weiterlesen

Veröffentlicht unter | Verschlagwortet mit , , , | Hinterlasse einen Kommentar

ActiveAdmin: Standard-Datumsformat ändern

ActiveAdmin erkennt und formatiert die meisten Zeit- und Datumsangaben. In Tabellen kann es jedoch störend sein, wenn das Datum mit dem ausgeschriebenen Wochentag beginnt: Es frisst Platz und sorgt aufgrund unterschiedlicher Länge vor allem in Tabellen für eine ungleichmäßige Ausrichtung. Mit den Standardeinstellungen von ActiveAdmin und Rails-I18n ist das leider der Fall. Ich ändere das Format daher meist auf etwas wie 30.08.2015, 13:39 Uhr.

Hierfür ändere ich das Format, das ActiveAdmin für die Lokalisierung verwendet, auf default. Im vorgegebenen Initializer steht die Konfiguration aktuell nicht drin, so dass ich es am Ende ergänze:

ActiveAdmin.setup do |config|
  # ...
  config.localize_format = :default
end

Weiterlesen

Veröffentlicht unter | Verschlagwortet mit , , , | Hinterlasse einen Kommentar

ActiveAdmin verstehen: Von der Application zur ResourceDSL

ActiveAdmin ist gut dokumentiert und auch ohne Verständnis der Interna gut zu benutzen. Spätestens wenn man eigene Erweiterungen schreiben möchte, muss man aber verstehen, wie die Engine funktioniert. Ein Anfang für Version 1.0.0.pre1:

Das Modul ActiveAdmin realisiert mittels class << self eine singleton-ähnliche Instanz von ActiveAdmin::Application:

module ActiveAdmin
  class << self
    def application
      @application ||= ::ActiveAdmin::Application.new
    end

Beim Setzen der Routen in der routes.rb wird automatisch load! ausgelöst:

module ActiveAdmin
  class Application

    def routes(rails_router)
      load!
      router.apply(rails_router)
    end

Dieses lädt alle Dateien (üblicherweise app/admin/*) und erzeugt den Default-Namespace :admin:

    def load!
      files.each{ |file| load file }
      namespace(default_namespace)
    end

Weiterlesen

Veröffentlicht unter | Verschlagwortet mit , , , | Hinterlasse einen Kommentar

10 Tote, zum Glück nur Männer!

Ich habe gerade eine interessante Kritik an Star Wars Episode II gesehen. Hier wird auf Anakin Skywalkers Geständnis eingegangen, dass er im Sandmenschen-Dorf nicht nur die Männer, sondern auch Frauen und Kinder getötet hätte. Dass ein angeblich moralpachtender Jedi in spe den Tot von Männern relativiert, indem er den Tot von Frauen und Kindern gegenüberstellt, empfanden komischerweise weder Filmschaffer Lucas noch Kritiker ungewöhnlich. Kein Wunder, kennt man diese Form sexistischer Moral nur zu gut aus den Medien:

Unglücksmeldung:
„22 Tote, darunter Frauen und Kinder.“
Warum ist das wichtig?
Ich warte, daß es mal heißt:
„10 Tote, zum Glück nur Männer!“

Volker Pispers

Im Seerecht scheint der vergleichbare Anachronismus „Frauen und Kinder zuerst!“ mittlerweile behoben zu sein. Hier bekommt üblicherweise derjenige als erster Hilfe, der sie am meisten benötigt. Es geht voran…

Veröffentlicht unter | Hinterlasse einen Kommentar