This file collects various notes about how certain aspects are implemented. # Full text search The pg_search Ruby gem is used for full-text searched in Rails. See: https://github.com/Casecommons/pg_search Reformatted SQL query for fulltext search: SELECT COUNT(*) FROM "packages" WHERE ( ( ( to_tsvector('simple', coalesce("packages"."name"::text, '')) || to_tsvector('simple', coalesce("packages"."description"::text, '')) || to_tsvector('simple', coalesce("packages"."long_description"::text, '')) ) @@ ( to_tsquery('simple', '''' || 'browser' || ' ''') ) ) ) ## Create search index to speed up searches significantly CREATE INDEX packages_gin ON packages USING GIN( (to_tsvector('simple', coalesce("packages"."name"::text, '')) || to_tsvector('simple', coalesce("packages"."description"::text, '')) || to_tsvector('simple', coalesce("packages"."long_description"::text, ''))) ); --------- Used: https://github.com/semaperepelitsa/jquery.fileupload-rails Which is a gem for: https://github.com/blueimp/jQuery-File-Upload --- Paperclip for attachment/screenshot file handlind within ActiveRecord https://github.com/thoughtbot/paperclip Rails 5 is said to contain functionality like that already. Might be worth migrating to that at some time. --- Importer How Debian repositories are organized: https://wiki.debian.org/RepositoryFormat --- Logging from within the application into the database's "log" table: Log.log "foo" or with section (default='frontend'): Log.log "foo", "importer" --- To create admin users --------------------- rails c > User.new(email: 'email@christoph-haas.de', password: 'secret').save --- Multiple distributions (e.g. Ubuntu, Debian) - new table: distributions - id - name (e.g. "Debian") - description (e.g. "The Debian GNU/Linux distribution") - url (http://www.debian.org/) - type (apt, later: rpm) - logo - screenshots: new field for source_id Admin interface to manage sources --- AppStream data - screenshots: new field for type ('user-generated', 'upstream', 'logo') user-generated: uploaded by a random user upstream: official screenshot from the developer logo: not a screenshot - just a logo --- debshots used to use the 'paperclip' gem for file handling of images. Paperclip was deprecated so something new was needed. At the same time Rails 6.0 was released and offered file handling using ActiveStorage. However ActiveStorage was so seriously flawed and incomplete in 2020 that I decided to go for the 'shrine' gem. There is a Rake task that converts Paperclip attachments to Shrine attachments. This is a one-time conversion. Images are saved in four ways: - original image - thumb image (to be used in packages.debian.org) - large image (original image with watermark on the right edge) - medium image (up to 800x600) - small image (up to 320x240) for gallery/grid views Screenshot.image was the Paperclip image attachment. Screenshot.simge is the Shring image attachment. I used two different attributes to avoid confusion.