Deploying a Rails app to cloud services using Docker and Kamal (a library for deploying apps containerized with Docker).
rails new APP_NAME -d postgresql -j esbuild -c bootstrap --skip-test
cd APP_NAME
| //------ ROOT -------- | |
| root# apt-get update | |
| root# apt-get upgrade | |
| // Dependencies | |
| apt-get install -y git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev \ | |
| libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev software-properties-common libffi-dev \ | |
| libpcre3-dev unzip htop zip | |
| After automatically updating Postgres to 10.0 via Homebrew, the pg_ctl start command didn't work. | |
| The error was "The data directory was initialized by PostgreSQL version 9.6, which is not compatible with this version 10.0." | |
| Database files have to be updated before starting the server, here are the steps that had to be followed: | |
| # need to have both 9.6.x and latest 10.0 installed, and keep 10.0 as default | |
| brew unlink postgresql | |
| brew install [email protected] | |
| brew unlink [email protected] | |
| brew link postgresql |
| root# apt-get update | |
| root# apt-get upgrade | |
| // dependencies for Ruby | |
| root# apt-get install -y git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev \ | |
| libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev python-software-properties libffi-dev \ | |
| libpcre3-dev unzip | |
| // Node.js v7 | |
| root# curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash - |
| <<APP>> change this variables |
| http://stackoverflow.com/questions/22667401/postgres-json-data-type-rails-query | |
| http://stackoverflow.com/questions/40702813/query-on-postgres-json-array-field-in-rails | |
| #payload: [{"kind"=>"person"}] | |
| Segment.where("payload @> ?", [{kind: "person"}].to_json) | |
| #data: {"interest"=>["music", "movies", "programming"]} | |
| Segment.where("data @> ?", {"interest": ["music", "movies", "programming"]}.to_json) | |
| Segment.where("data #>> '{interest, 1}' = 'movies' ") | |
| Segment.where("jsonb_array_length(data->'interest') > 1") |
| # ubuntu: sudo nano /etc/postgresql/<< version >>/main/pg_hba.conf | |
| # Позволяет любому пользователю локальной системы подключиться | |
| # к любой базе данных, используя любое имя базы данных через | |
| # доменные сокеты Unix (по умолчанию для локальных подключений). | |
| # | |
| # TYPE DATABASE USER ADDRESS METHOD | |
| local all all trust | |
| # То же, но для локальных замкнутых подключений по TCP/IP. |
| upstream puma_<%= fetch(:nginx_config_name) %> { <% | |
| flags = 'fail_timeout=0' | |
| @backends = [fetch(:puma_bind)].flatten.map do |m| | |
| etype, address = /(tcp|unix|ssl):\/{1,2}(.+)/.match(m).captures | |
| if etype =='unix' | |
| "server #{etype}:#{address} #{fetch(:nginx_socket_flags)};" | |
| else | |
| "server #{address.gsub(/0\.0\.0\.0(.+)/, "127.0.0.1\\1")} #{fetch(:nginx_http_flags)};" | |
| end | |
| end |
| # sudo vi /etc/postgresql/9.5/main/pg_hba.conf | |
| # Позволяет любому пользователю локальной системы подключиться | |
| # к любой базе данных, используя любое имя базы данных через | |
| # доменные сокеты Unix (по умолчанию для локальных подключений). | |
| # | |
| # TYPE DATABASE USER ADDRESS METHOD | |
| local all all trust | |
| # То же, но для локальных замкнутых подключений по TCP/IP. |