apt: バージョン指定してElixirをインストールする方法

Ubuntu/Debianにaptを利用してElixirをインストールする方法は、ここに書いてある通りです: https://elixir-lang.jp/install.html#unix-%E7%B3%BB ただし、これをそのまま実行すると最新のElixirがインストールされます。バージョン指定してElixirをインス…

Ubuntu 18.04/20.04: フリーズ/クラッシュ問題対応(作業記録)解決済み

会社で購入したデスクトップPCにUbuntu 18.04 LTSとUbuntu 20.04 LTSをインストールしてみたところ、いくつか深刻な不具合に遭遇しました。一部は解決し、一部は未解決です。情報共有のため作業メモを残します。 マシンは@Sycomという会社から購入しました。…

Docker + Rails 6 + PostgreSQL による Web アプリケーション開発の始め方(Windows版)

要旨 Docker Desktop for Windowsを用いてRuby on Rails 6.0によるWebアプリケーション開発を行う手順をできるかぎり簡潔にまとめた。 Docker Composeを用いてデータベースサーバーのコンテナとWebサーバーのコンテナを管理する方法についても解説する。 こ…

Docker + Rails 6 + PostgreSQL による Web アプリケーション開発の始め方

要旨 Dockerを用いてRuby on Rails 6.0によるWebアプリケーション開発を行う手順をできるかぎり簡潔にまとめた。 Docker Composeを用いてデータベースサーバーのコンテナとWebサーバーのコンテナを管理する方法についても解説する。 対象OS macOS Mojave Ubu…

Elixir/Phoenix: Distillery を利用した tarball 作成と配備

『Elixir/Phoenix 初級④: バリデーション』のサンプルアプリ NanoPlanner を本番環境(Ubuntu 18.04 Server LTS)にセットアップして、公開する手順を紹介します。 デプロイメントツールとしてDistilleryを使用します。 前提条件 Ubuntu 18.04 Server LTS ku…

GCP/Ubuntu: Cloud SQL Proxy のセットアップ(追記あり)

先々月にGCP: 自動スケーリング時における Google Cloud SQL ホワイトリストの管理という記事を書きました。その続きです。 GCPのVMインスタンスからCloud SQLインスタンスへ接続するのにCloud SQL Proxyを使えばうまく行くんじゃないか、という考察で終わっ…

GCP: 自動スケーリング時における Google Cloud SQL ホワイトリストの管理

次のような条件でRuby on Railsアプリケーションを運用することにした。 プラットフォームは Google Cloud Platform (GCP)。 負荷状況により自動スケーリング(auto scaling)を行うためマネージドインスタンスグループを利用。 データベースは Google Cloud…

『Elixir/Phoenix初級③: フォーム構造体とチェンジセット』(OIAX BOOKS)本日発売開始

拙著『Elixir/Phoenix初級③: フォーム構造体とチェンジセット』(OIAX BOOKS)が本日発売になりました。価格は税込み1,944円。206ページです。 残念ながら全国の書店には並ばないので、AmazonかOIAX BOOKSのウェブストアからお買い求めください。Kindle版も…

Windows Subsystem for Linux は Rails 入門環境には(多分)向かない【追記あり】

私は、Ruby on Rails の入門書の著者あるいは初心者向け講習会の講師として、Microsoft Windows というプラットフォームの取り扱いに悩まされてきました。 プログラミング入門者・初心者の間では Windows が主流ですが、プロの Rails エンジニアの多くは mac…

macOS/Homebrewで複数バージョンのPostgreSQLを共存させる方法(2018年版)

複数の PostgreSQL クラスタ(インスタンス)を起動するで書いたように Ubuntu 環境では、普通に apt-get でインストールするだけで複数バージョンのPostgresqlを共存させる状況が整います。 しかし、macOS/Homebrew 環境ではちょっとした準備作業が必要とな…

PostgreSQL: template1 のエンコーディングを UTF-8 に変更する

PostgreSQL におけるデータベース作成とは、既存のデータベースの複製を作ることです。デフォルトでは template1 という名前のデータベースが複製元となります。 さて、PostgreSQLのインストール直後に template1 のエンコーディングが SQL_ASCII になってい…

Ubuntu: lsyncd によるディレクトリのリアルタイム同期(追記あり)

目標 Ubuntu 16.04 Server がインストールされた 2 台のサーバー host1 と host2 がある。 host1 と host2 の間で /home/foo/share ディレクトリの内容を常に同期する。 一般ユーザー(root 以外のユーザー)で rsync コマンドを実行する。 準備作業 RSA鍵ペ…

Ubuntu: init system を systemd から upstart に変える

Ubuntu 16.04 がインストールされている私の職場PCがハードディスクの故障で動かなくなり、修復のためにいろいろやっている過程で、 ブート時のメニューで「Ubuntu」を選んでも起動しない。 「Advanced options for Ubuntu」を選んでから「upstart」という文…

PostgreSQL: キャッシュした計画は結果型を変更してはなりません

PostgreSQL を用いた Rails アプリケーション開発で キャッシュした計画は結果型を変更してはなりません あるいは cached plan must not change result type というエラーメッセージに遭遇することがある。 解決法は簡単で、Rails サーバーを再起動すればよ…

Phusion Passenger: permission denied で ruby を実行できない問題

問題 Rails あるいは Sinatra を Phusion Passenger で動かしている状況で、permission denied により ruby を実行できない。 解決策 (1) Rails なら config/environment.rb、Sinatra なら config.ru の持ち主が ruby を実行できるユーザーかどうかを確認し…

Rails: send_data/send_file でデータの中身がテキストとして表示される問題

問題 次のようなRailsのアクションにより files/example.pdf の中身をユーザーにダウンロードさせたい。 class FilesController < ApplicationController def show filename = 'example.pdf' path = Rails.root.join('files', filename) send_file(path, typ…

OmniAuth: ロードバランサ配下での redirect_uri_mismatch 問題

問題 最近、OmniAuthを使ってGithub経由でのユーザー認証機能を既存のRailsアプリに組み込んだ。 その際、開発環境ではすんなり動いたのだが、本番環境にデプロイすると redirect_uri_mismatch エラーが出てしまう。 解決法 config/initializers/omniauth.rb…

Ruby: case 式における何もしない else の扱い

先週末に WEB+DB PRESS Vol.99の「良いコード」を本気でコードレビューしてみた という興味深いブログ記事が書かれました。 はてなブックマークでのコメントを見ると、多くの人がブログ記事の内容に賛同しているようですが、「P12: 何もしないelseは必要か?…

PostgreSQL: ポイントインタイムリカバリ(PITR) と Transaction ID

PostgreSQL の「ポイントインタイムリカバリ(PITR)」について調べていて、ドキュメントの中に気になる記述を見つけた。 もし以前のある時点まで復旧させたい場合(例えば、経験不足のデータベース管理者が主トランザクションテーブルを消去した直前)、rec…

PostgreSQL のアップグレード時に明らかになる pg_wrapper の役割

PostgreSQL 9.5 のサーバーがデフォルトの 5432 番ポートで動いている状態で、PostgreSQL 9.6 のサーバーをインストールするとどうなるか。 $ apt-get install postgresql-9.6 結果。PostgreSQL 9.6 の main クラスタが 5433 番ポートで立ち上がる。 この状…

PostgreSQL: MySQL の SHOW CREATE DATABASE の代わりになるもの

私の知る限りにおいて、PostgreSQL のコンソールであるデータベースの CREATE DATABASE 文を知る方法はない。すなわち、MySQL コンソールの SHOW CREATE DATABASE コマンドに対応するコマンドはない。 しかし、代わりに次のようなコマンドを実行すればよい:…

PostgreSQL: 非特権ユーザーによる pg_dump と pg_restore

前提条件 ホスト palau の 50001 番ポートで PostgreSQL サーバが稼働している。 このサーバの非特権ユーザー alice がデータベース db0 と db1 を所有している。 alice のパスワードは bravo である。 db0 には複数のテーブルがある。ただし、スキーマは pu…

PostgreSQL 9.6: レプリケーションの設定(同期)

この記事は、PostgreSQL 9.6: レプリケーションの設定(非同期)の続きです。 同期レプリケーションモードへの移行 postgresql.conf (マスター側)の書き換え # sudo vim /etc/postgresql/9.6/cluster1/postgresql.conf synchronous_standby_names = 'clust…

PostgreSQL 9.6: レプリケーションの設定(非同期)

要点 MySQL 用語の「マスター」と「スレーブ」を、PostgreSQL 用語では「マスター」と「スタンバイ(standby)」と呼ぶ。 レプリケーションには「非同期(async)」と「同期(sync)」の区別がある。可用性を上げたいなら「同期」を選択する。 pg_basebackup…

複数の PostgreSQL クラスタ(インスタンス)を起動する

PostgreSQL のクラスタ(インスタンス)管理は、MySQL の mysql_multi よりも簡単。 以下、Ubuntu 16.04 で行ったトライアルの結果。 クラスタの作成 $ sudo pg_createcluster --port=54321 9.6 abc $ sudo pg_createcluster --port=54322 9.6 xyz sudo -u p…