{"id":17185570,"url":"https://github.com/jscheid/ansible-rails_deploy","last_synced_at":"2025-03-25T03:30:23.958Z","repository":{"id":20857427,"uuid":"24144192","full_name":"jscheid/ansible-rails_deploy","owner":"jscheid","description":"Deploy Rails applications using Ansible and DebOps","archived":false,"fork":false,"pushed_at":"2014-09-17T16:03:24.000Z","size":222,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-01-30T04:19:35.463Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Ruby","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jscheid.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-09-17T12:41:17.000Z","updated_at":"2019-05-25T15:08:48.000Z","dependencies_parsed_at":"2022-09-13T20:01:01.152Z","dependency_job_id":null,"html_url":"https://github.com/jscheid/ansible-rails_deploy","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jscheid%2Fansible-rails_deploy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jscheid%2Fansible-rails_deploy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jscheid%2Fansible-rails_deploy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jscheid%2Fansible-rails_deploy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jscheid","download_url":"https://codeload.github.com/jscheid/ansible-rails_deploy/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245394119,"owners_count":20608113,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-15T00:47:09.830Z","updated_at":"2025-03-25T03:30:23.914Z","avatar_url":"https://github.com/jscheid.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n## [![DebOps project](http://debops.org/images/debops-small.png)](http://debops.org) rails_deploy\n\n\n\n[![Travis CI](http://img.shields.io/travis/debops/ansible-rails_deploy.svg?style=flat)](http://travis-ci.org/debops/ansible-rails_deploy) [![test-suite](http://img.shields.io/badge/test--suite-ansible--rails__deploy-blue.svg?style=flat)](https://github.com/debops/test-suite/tree/master/ansible-rails_deploy/)  [![Ansible Galaxy](http://img.shields.io/badge/galaxy-debops.rails__deploy-660198.svg?style=flat)](https://galaxy.ansible.com/list#/roles/1591) [![Platforms](http://img.shields.io/badge/platforms-debian%20|%20ubuntu-lightgrey.svg?style=flat)](#)\n\n\n\n\n\n\n`debops.rails_deploy` role allows you to easily setup infrastructure\ncapable of running Rails applications. It removes all of the headaches\nassociated to setting up a secure Rails app that is ready for production so\nyou can concentrate on developing your app.\n\n#### A few features supplied by this role\n\n##### High level goals\n\n- Setup an entire rails app server with 1 line of configuration with sane defaults\n- Optionally and easily separate your app servers, database and worker into multiple servers\n- Quickly and easily switch between popular default databases and backend servers\n- Be as secure as possible and adhere to as many best practices as possible\n\n##### Backups and logging\n\n- Postgresql runs a daily backup with daily/weekly rotation\n- Both your backend server and background worker get logged to 1 logrotated file\n- The rails process gets sent to syslog.user\n\n##### System level minutia\n\n- User accounts, permissions and ssh keys are automatically managed\n- Paths such as logs, pids and sockets are automatically managed\n\n##### Deploy features\n- Automatically set deploy keys to github/gitlab with 1 line of configuration\n  - This leverages their API, all you have to do is supply their token\n- Keep track of your schema file and config folder's mtime in local facts\n  - This allows the deploy task to attempt to guess if your server needs a full restart or a quick reload\n- Only run database commands from a single master app server\n  - This master is defined by simply being first in the group list\n- Various options to turn certain features on/off\n  - A few examples would be database creation, migration and force restarting your server\n- Add custom services which get restarted/reloaded at the end of the deploy cycle\n  - If you have a SOA setup this could be handy\n- Add and remove custom tasks\n  - By default it is set to precompile assets and clear the /tmp cache\n- Optionally swap a static deploy page in/out during the deploy cycle\n\n##### Security\n- Secure passwords are managed automatically for your database\n- Ports are blocked and only whitelisted for IP addresses/masks that you specify\n- SSL is enabled by default but can be turned off if you really don't want it\n- Self signed SSL certs are automatically managed for you\n  - Changing to properly signed certificates is a breeze\n\n\n\n\n\n### Installation\n\nThis role requires at least Ansible `v1.7.0`. To install it, run:\n\n    ansible-galaxy install debops.rails_deploy\n\n#### Are you using this as a standalone role without DebOps?\n\nYou may need to include missing roles from the [DebOps common\nplaybook](https://github.com/debops/debops-playbooks/blob/master/playbooks/common.yml)\ninto your playbook.\n\n[Try DebOps now](https://github.com/debops/debops) for a complete solution to run your Debian-based infrastructure.\n\n\n\n\n\n### Role dependencies\n\n- `debops.secret`\n- `debops.etc_services`\n- `debops.nodejs`\n- `debops.ruby`\n- `debops.redis`\n- `debops.postgresql`\n- `debops.mysql`\n- `debops.nginx`\n- `debops.monit`\n- `debops.monit`\n\n\n\n\n\n### Role variables\n\nList of default variables available in the inventory:\n\n    ---\n    \n    # ---- System ----\n    \n    # Should postgresql or mysql and nginx be setup for you automatically?\n    # Redis will also be setup if you enable background worker support.\n    # Critical dependencies like nodejs and ruby will always be setup for you.\n    # If you want anything to be on a non-app host then you would remove it here.\n    rails_deploy_dependencies: ['database', 'redis', 'nginx']\n    \n    # Which packages do you want installed?\n    # Add as many packages as you want, the database_package will automatically\n    # pick libpq-dev or libmysqlclient-dev depending on what database you picked.\n    rails_deploy_packages: ['{{ rails_deploy_database_package }}']\n    \n    # A list of additional groups that this app's user belongs to.\n    # If you want to be able to ssh into the server then you must include 'sshusers'.\n    rails_deploy_user_groups: []\n    \n    # Where should the public ssh key be read in from? This is only used when you\n    # have included 'sshusers' in the user_groups list.\n    rails_deploy_user_sshkey: \"{{ lookup('file', '~/.ssh/id_rsa.pub') }}\"\n    \n    \n    # ---- Hosts ----\n    \n    # What inventory group does your app belong to?\n    rails_deploy_hosts_group: 'debops_rails_{{ rails_deploy_service }}'\n    \n    # Which application server should run database related tasks?\n    rails_deploy_hosts_master: '{{ groups[rails_deploy_hosts_group][0] }}'\n    \n    \n    # ---- Git ----\n    \n    # The location repo which will get cloned during each deploy. You can use a\n    # remote or local repo.\n    rails_deploy_git_location: ''\n    \n    # Which branch or tag should be used?\n    rails_deploy_git_version: 'master'\n    \n    # Which remote should be used?\n    rails_deploy_git_remote: 'origin'\n    \n    # Supply your git provider's api token to automatically set deploy keys.\n    # If False you will have to manually add deploy keys for each app server.\n    \n    # Supports github and gitlab for now:\n    # Github: https://github.com/settings/applications\n    #   Under personal access tokens, check off 'write:public_key'.\n    #     You may want to enable other access limits for repo/public_repo, etc..\n    #\n    # Gitlab: https://yourgitlabhost.com/profile/account\n    #   Your private token should already be there.\n    rails_deploy_git_access_token: False\n    \n    \n    # ---- Deploy ----\n    \n    # What should the service be named?\n    # The default value plucks out your repo name (without .git) from your location.\n    rails_deploy_service: \"{{ rails_deploy_git_location | basename | replace('.git', '') }}\"\n    \n    # What should the system environment be set to?\n    rails_deploy_system_env: 'production'\n    \n    # A list of environments to skip, it will remove your system env from the list\n    # during the deploy phase automatically.\n    rails_deploy_bundle_without: ['development', 'staging', 'production', 'test']\n    \n    \n    # ---- Backend ----\n    \n    # Which backend type are you using? 'unicorn' and 'puma' are supported so far.\n    rails_deploy_backend: 'unicorn'\n    \n    # What do you want to listen on? You can choose a tcp addr:port or unix socket.\n    # Do not bother to include the socket/tcp prefix, that will be handled for you.\n    rails_deploy_backend_bind: '{{ rails_deploy_service_socket }}'\n    \n    # What state should the backend be in?\n    rails_deploy_backend_state: 'started'\n    rails_deploy_backend_enabled: True\n    \n    # When set to true the backend will always restart instead of reload but it\n    # will only restart if the repo changed. This makes for hands free deployment\n    # at the cost of a few seconds+ of downtime per deploy.\n    #\n    # You may want to combine this with force migrate in which case all you ever have\n    # to do is push your app and you don't have to wonder whether or not the code\n    # you're changing requires a full restart or not.\n    rails_deploy_backend_always_restart: False\n    \n    \n    # ---- Database ----\n    \n    # Should the database be created by default?\n    rails_deploy_database_create: True\n    \n    # Should the database get a db:schema:load and db:seed in an idempotent way?\n    rails_deploy_database_prepare: True\n    \n    # Should the database get automatically migrated in an idempotent way?\n    rails_deploy_database_migrate: True\n    \n    # Should the database get migrated no matter what?\n    # You may want to do this as a 1 off command with --extra-vars in case your\n    # schema file's checksum somehow gets out of sync and you need to migrate.\n    #\n    # Another use case would be if you have automatic migrations turned off and\n    # you just deployed but now you want to do an isolated migration.\n    rails_deploy_database_force_migrate: False\n    \n    # It supports 'postgresql' or 'mysql' for now.\n    rails_deploy_database_adapter: 'postgresql'\n    \n    # Make sure this matches your pg cluster info, ignore it if you use mysql.\n    rails_deploy_postgresql_cluster: '9.1/main'\n    \n    # Where is your database hosted?\n    rails_deploy_database_host: '{{ ansible_fqdn }}'\n    rails_deploy_database_port: '5432' # 3306 for mysql\n    \n    # What are your super user names?\n    rails_deploy_postgresql_super_username: 'postgres'\n    rails_deploy_mysql_super_username: 'mysql'\n    \n    # What should some of the configuration options be set to?\n    rails_deploy_database_pool: 25\n    rails_deploy_database_timeout: 5000\n    \n    \n    # ---- Background Worker ----\n    \n    # Enable background worker support. This will create an init.d service, register\n    # it with monit and add it into the deploy life cycle.\n    rails_deploy_worker_enabled: False\n    rails_deploy_worker_state: 'started'\n    \n    # At the moment it only supports sidekiq but resque could happen in the future.\n    rails_deploy_worker: 'sidekiq'\n    \n    # Where is your worker hosted?\n    rails_deploy_worker_host: '{{ ansible_fqdn }}'\n    rails_deploy_worker_port: '6379'\n    \n    # How should the connection be made to the redis server?\n    # If your server has a password you must add it here.\n    # Example: redis://:mypassword@{{ rails_deploy_worker_host }}:{{ rails_deploy_worker_port }}/0'\n    rails_deploy_worker_url: 'redis://{{ rails_deploy_worker_host }}:{{ rails_deploy_worker_port }}/0'\n    \n    \n    # ---- Tasks ----\n    \n    # Precompile assets and remove any temporary cache files on each deploy.\n    # Add or remove as many tasks as you want. They are executed in the context\n    # of the root directory of your app and only happen when the repo changes.\n    rails_deploy_default_tasks:\n      - 'bundle exec rake assets:precompile'\n      - 'rm -rf tmp/cache'\n    \n    # Execute tasks before and/or after your backend is reloaded/restarted.\n    rails_deploy_early_tasks:\n      # Example, let's say you wanted to execute whenever also:\n      # - 'bundle exec whenever --clear-crontab {{ rails_deploy_service }}'\n    \n    # This is the absolute last thing that happens during a deploy.\n    rails_deploy_late_tasks: []\n    \n    \n    # ---- Services ----\n    \n    # Add 1 or more custom services related to the app, they will have\n    # their state changed on each deploy. The changed_state is the action to\n    # take when the state of the git repo has changed.\n    \n    # They will get restarted/reloaded at the end of the deploy.\n    # Everything is optional except for the name.\n    rails_deploy_extra_services: []\n    \n    #rails_deploy_extra_services:\n    #  - name: ''\n    #    changed_state: 'reloaded'\n    #    state: 'started'\n    #    enabled: True\n    \n    \n    # ---- Log rotation ----\n    \n    # How often should they be rotated?\n    # Accepted values: hourly, daily, weekly, monthly and yearly\n    rails_deploy_logrotate_interval: 'weekly'\n    \n    # Log files are rotated N times before being removed.\n    rails_deploy_logrotate_rotation: 24\n    \n    \n    # ---- Environment settings ----\n    \n    # Both the default and custom environment variables will get added together\n    # and be written to /etc/default/{{ rails_deploy_service }}.\n    \n    # Default environment variables added to each app.\n    rails_deploy_default_env:\n      RAILS_ENV: '{{ rails_deploy_system_env }}'\n    \n      DATABASE_URL: \"{{ rails_deploy_database_adapter }}://{{ rails_deploy_service }}:{{ rails_deploy_database_user_password }}@{{ rails_deploy_database_host }}:{{ rails_deploy_database_port }}/{{ rails_deploy_service }}_{{ rails_deploy_system_env }}?pool={{ rails_deploy_database_pool }}\u0026timeout={{ rails_deploy_database_timeout }}\"\n    \n      # Application variables, they are used in the backend/worker variables below.\n      SERVICE: '{{ rails_deploy_service }}'\n      LOG_FILE: '{{ rails_deploy_log }}/{{ rails_deploy_service }}.log'\n      RUN_STATE_PATH: '{{ rails_deploy_run }}'\n    \n      # Backend variables, they work in conjunction with the example\n      # server configs. Check docs/examples/rails/config/puma.rb|unicorn.rb.\n      LISTEN_ON: '{{ rails_deploy_backend_bind }}'\n    \n      THREADS_MIN: 0\n      THREADS_MAX: 16\n      WORKERS: 2\n    \n      # Background worker variables. Check docs/examples/rails/config/sidekiq.yml\n      # and initializers/sidekiq.rb on how use this in your application.\n      BACKGROUND_URL: '{{ rails_deploy_worker_url }}'\n      BACKGROUND_THREADS: '{{ rails_deploy_database_pool }}'\n    \n    # Custom environment variables added to a specific app.\n    rails_deploy_env: {}\n    \n    \n    # ---- Nginx settings ----\n    \n    # Should nginx be enabled?\n    rails_deploy_nginx_server_enabled: True\n    \n    # What domain names should the app be associated to?\n    rails_deploy_nginx_domains: ['{{ ansible_fqdn }}']\n    \n    # If you want to edit any of the values for nginx below, you will need to copy\n    # the whole variable over even if you need to edit 1 value.\n    #\n    # Consult the debops.nginx documentation if needed.\n    \n    # Configure the upstream.\n    rails_deploy_nginx_upstream:\n      enabled: '{{ rails_deploy_nginx_server_enabled }}'\n      name: '{{ rails_deploy_service }}'\n      server: \"{{ 'unix:' + rails_deploy_backend_bind if not ':' in rails_deploy_backend_bind else rails_deploy_backend_bind }}\"\n    \n    # Configure the sites-available.\n    rails_deploy_nginx_server:\n      enabled: '{{ rails_deploy_nginx_server_enabled }}'\n      default: False\n      name: '{{ rails_deploy_nginx_domains }}'\n      root: '{{ rails_deploy_src }}/public'\n    \n      error_pages:\n        '404': '/404.html'\n        '422': '/422.html'\n        '500': '/500.html'\n        '502 503 504': '/502.html'\n    \n      location_list:\n        - pattern: '/'\n          options: |\n            try_files $uri $uri/index.html $uri.html @{{ rails_deploy_nginx_upstream.name }};\n        - pattern: '~ ^/(assets|system)/'\n          options: |\n            gzip_static on;\n            expires max;\n            add_header Cache-Control public;\n            add_header Last-Modified \"\";\n            add_header ETag \"\";\n        - pattern: '@{{ rails_deploy_nginx_upstream.name }}'\n          options: |\n            gzip off;\n            proxy_set_header   X-Forwarded-Proto $scheme;\n            proxy_set_header   Host              $http_host;\n            proxy_set_header   X-Real-IP         $remote_addr;\n            proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;\n            proxy_redirect     off;\n            proxy_pass         http://{{ rails_deploy_nginx_upstream.name }};\n    \n    \n    # Usage examples:\n    \n    # ---- Bare minimum ----\n    #rails_deploy_git_location: 'git@github.com:yourname/mycoolapp.git'\n    \n    # ---- Use a custom service name ----\n    #rails_deploy_service: 'myawesomeapp'\n    \n    # ---- Use a tag or branch instead of master ----\n    #rails_deploy_git_version: 'v0.1.0'\n    \n    # ---- Use mysql instead of postgres ----\n    #rails_deploy_database_adapter: 'mysql'\n    \n    # ---- Use puma instead of unicorn ----\n    #rails_deploy_backend: 'puma'\n    \n    # ---- Enable the background worker ----\n    #rails_deploy_worker_enable: True\n    \n    # ---- Listen on a tcp port instead of a socket ----\n    #rails_deploy_backend_bind: '{{ ansible_fqdn }}:8080'\n    \n    # ---- Deploy to staging instead of production ----\n    #rails_deploy_system_env: 'staging'\n\n\n\nList of internal variables used by the role:\n\n    rails_deploy_key_data\n\n\n\n### Detailed usage guide\n\nBelow is the bare minimum to get started.\n\n#### hosts\n\n    [debops_rails_yourappname]\n    somehost\n\n#### inventory/host_vars/somehost.yml\n\n    ---\n\n    rails_deploy_git_location: 'git@github.com:youraccount/yourappname.git'\n\nThe idea is that you'll push your code somewhere and then the role will\npull in from that repo.\n\n#### playbook\n\n    ---\n\n    # playbooks/custom.yml\n\n    - name: Deploy yourappname\n      hosts: debops_rails_yourappname\n      sudo: true\n    \n      roles:\n        - { role: debops.rails_deploy, tags: yourappname }\n\n#### Running the playbook with DebOps\n\n    debops -t yourappname\n\n#### Running the playbook without DebOps\n\n    ansible-playbook playbooks/custom.yml -i /path/to/your/inventory -t yourappname\n\n#### Changes you need to make in your rails application\n\n##### Gemfile\n\nYou must have unicorn **or** puma added.\n    # Pick one, you may also want to bump the version to the most recent version\n    # These are the most recent as of ~August 2014\n\n    gem 'unicorn', '~\u003e 4.8.3'\n    gem 'puma', '~\u003e 2.9.0'\n\nYou must have pg **or** mysql2 added.\n    # Pick one, you may also want to bump the version to the most recent version\n    # These are the most recent as of ~August 2014\n\n    gem 'pg', '~\u003e 0.17.1'\n    gem 'mysql2', '~\u003e 0.3.16'\n\n##### Backend server config\n\nYou should base your unicorn or puma config off our [example\nconfigs](https://github.com/debops/ansible-rails_deploy/tree/master/docs/examples/rails/config)\nbecause certain environment variables are required to exist. Also certain\nsignals are sent to reload or restart the backend which require certain\nconfiguration options to be set. Luckily you don't have to think about any\nof that, just use the pre-written configs in your app.\n\n##### Background worker config\n\nYou should also base your sidekiq configs off our [example\nconfigs](https://github.com/debops/ansible-rails_deploy/tree/master/docs/examples/rails/config).\nSimilar to the backend server it expects certain environment variables to\nexist.\n\n##### Database config\n\nThe database configuration below would be reasonable to use. The only\nrequirement is that yours must use the `DATABASE_URL` format in whatever\nenvironments you plan to deploy to. That simply means that those\nenvironments should be removed from your database config file. This role\nsets up the `DATABASE_URL` for you.\n\n    ---\n    development:\n      url: \u003c%= ENV['DATABASE_URL'].gsub('?', '_development?') %\u003e\n    test:\n      url: \u003c%= ENV['DATABASE_URL'].gsub('?', '_test?') %\u003e\n\n##### Application config\n\nIn order to log everything to 1 file you must drop this line into your\napplication config. This would apply to all environments. Feel free to move\nthis to only staging and/or production if you don't want this to happen in\ndevelopment.\n\n    config.paths['log'] = ENV['LOG_FILE']\n\n##### Production environment config\n\nChances are you'll want your rails app to write to syslog in production or\non your staging/build/etc. server. Copy this into your production\nenvironment config.\n\n    require 'syslog/logger'\n    \n    # ...\n    \n    # The tags are optional but it's useful to have.\n    config.log_tags = [ :subdomain, :uuid ]\n    \n    # This allows you to write to syslog::user without any additional gems/config.\n    config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new('yourappname'))\n\n##### Public files\n\nYou will likely want the following files to exist in your `/public`\ndirectory:\n\n- 404, 422, 500 and 502 html files to process error pages\n- deploy html file to swap in/out during the deploy process\n\nThe above will allow nginx to serve those files directly before rails even\ngets a chance.\n\n#### Don't feel like making these small changes every time you make a new app?\n\nMe neither. That's why I created [orats](https://github.com/nickjj/orats).\nIt is a command line tool that generates a shiny new rails application with\nan accumulation of best practices that I have picked up over time. It is\nalso a little opinionated. Check out [orats' git\nrepo](https://github.com/nickjj/orats) if you're interested.\n\n\n#### FAQ / troubleshooting guide\n\n##### You switched from unicorn to puma or puma to unicorn and the site is dead\n\nChances are you're deploying with tags so the entire role did not run. When\nyou switch servers nginx needs to be restarted. Make sure you `-t nginx` or\njust run the whole role when you change servers.\n\n##### You can't clone your repo\n\nSince the role needs to pull in from your git repo then it needs permission\nto your repo. The most common way to do that is to setup an API access\ntoken for GitHub.\n\nGitLab is also supported, all of this is documented in the default variables\nfile.\n\n##### How would you go about setting up a CI platform with this role?\n\nRather than impose a CI solution on you, you're free to do whatever you want.\n\nA possible situation might be to use this role to deploy to\na staging/CI/build server instead of directly to production. Now your build\nserver can run tests and push to production using this role on different\nhosts if everything goes well.\n\nThat would allow you to have a sweet CI setup where your developers only\nhave to git push somewhere and minutes later you have tested code in\nproduction if you don't have to worry about a ton of red tape.\n\n\n\n\n\n\n### Authors and license\n\n`rails_deploy` role was written by:\n\n- Nick Janetakis | [e-mail](mailto:nick.janetakis@gmail.com) | [Twitter](https://twitter.com/nickjanetakis) | [GitHub](https://github.com/nickjj)\n\nLicense: [GPLv3](https://tldrlegal.com/license/gnu-general-public-license-v3-%28gpl-3%29)\n\n\n\n***\n\nThis role is part of the [DebOps](http://debops.org/) project. README generated by [ansigenome](https://github.com/nickjj/ansigenome/).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjscheid%2Fansible-rails_deploy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjscheid%2Fansible-rails_deploy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjscheid%2Fansible-rails_deploy/lists"}