# 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' || ' ''') ) ) ) # Index: 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 -- Components: - Rails 5 (widespread, up-to-date, solves many common problems) - PostgreSQL (fast, easy, I don't like MySQL, good fulltext search) - Git (most people nowadays use Git) - jQuery (well known and easy to use) - Zurb Foundation (integrates nicer than Twitter Bootstrap) - Guard for automated testing (http://www.rubydoc.info/gems/guard-rails) -- 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" -- Future stuff ------------ A possible migration adding a unique constraint to avoid duplicate images class AddScreenshotUniqueConstraintImageFingerprint < ActiveRecord::Migration def change add_index :screenshots, [:package_id, :image_fingerprint], :unique => true end end A separate validation in the Screenshots model has been implemented already. This unique constraint would raise an error and not trigger a validation error properly unless the separate model validation is in place. -- Deployment ---------- - unpack the project - install Ruby 2.0.0 via rvm (see rvm.io) - sudo apt-get install libbz2-dev libpq-dev - sudo apt-get install postgresql - set /etc/postgres/.../pg_hba.conf: local all all md5 - sudo su - postgres - createuser -s -P debshots - createdb debshots - createdb debshots_dev - createdb debshots_test - bin/get-data-from-old-live-server.sh - gem install bundle - bundler - RAILS_ENV=development rake db:migrate - RAILS_ENV=test rake db:migrate - RAILS_ENV=production rake db:migrate - RAILS_ENV=production rake assets:precompile - RAILS_ENV=production rails s