20210101のdockerに関する記事は16件です。

PHPをvscode remote containerで開発したかった

はじめLaravel入れていたが、template的に使えるものが欲しかったので作った。

https://github.com/moeyashi/template-php-on-vscode-remote-container

Laravel入れたバージョンも作ろうかなと思います。

2020-01-02 追記

Laravel入れました。勢いあまってlaravel/ui authまで入った。

https://github.com/moeyashi/template-laravel-on-vscode-remote-container

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Dockre コマンド

Docker Hub のイメージを検索 (search)
Docker Hub から使いたいイメージを取得する (pull)
イメージからコンテナを生成して起動 (run)
コンテナ内でコマンド実行 (exec)
コンテナを停止 (stop)
コンテナをイメージ化 (commit)
いらなくなったらコンテナを削除 (rm)
いらなくなったらイメージを削除 (rmi)

その他コマンド

取得済みイメージ一覧 (images)
実行中コンテナ一覧 (ps)
停止中も含めた全てのコンテナ一覧 (ps -a)
停止中のコンテナを起動 (start)
ホストとコンテナ間でのファイルコピー (cp)

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Docker コマンド

Docker Hub のイメージを検索 (search)
Docker Hub から使いたいイメージを取得する (pull)
イメージからコンテナを生成して起動 (run)
コンテナ内でコマンド実行 (exec)
コンテナを停止 (stop)
コンテナをイメージ化 (commit)
いらなくなったらコンテナを削除 (rm)
いらなくなったらイメージを削除 (rmi)

その他コマンド

取得済みイメージ一覧 (images)
実行中コンテナ一覧 (ps)
停止中も含めた全てのコンテナ一覧 (ps -a)
停止中のコンテナを起動 (start)
ホストとコンテナ間でのファイルコピー (cp)

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Next.jsをdocker-compose upしたい!

はじめに

最近、開発環境をすべてdockerで完結させれればローカルが綺麗な状態に維持できる事に気がついたのでDockerでやりたがりがちです。
そこで、話題のNext.jsをdocker-composeで立ち上げてみましたので、自分用備忘録として残して置こうと思います

環境

macOS High Sierra v10.13.6
Docker version 19.03.8
docker-compose version 1.25.5

実装

docker上で全部完結させたいです

準備

新しくプロジェクト用ディレクトリを作り、その下に下記2つのファイルを置いてください。
Dockerfile と docker-compose.yml です。
docker-compose.yml の command にあるディレクトリ移動コマンドは、プロジェクトの名前に応じて適宜変更してください。今回は sample-app とします。

Dockerfile
FROM node:14.15.3-alpine
WORKDIR /usr/src/app
docker-compose.yml
version: '3'
services:
  node:
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - ./:/usr/src/app
    command: sh -c "cd sample-app && npm run dev"
    ports:
      - "3000:3000"

現状です

$ ls
Dockerfile  docker-compose.yml

create-next-appコマンドをインストール

create-next-appコマンドをインストールします。

$ docker-compose run --rm node npm install create-next-app

create-next-appコマンドを実行

これでnextアプリを作ります。
create-next-app は create-react-app と違ってインストール先のディレクトリ指定できないようなので、アプリ名は docker-compose.yml の command で指定したディレクトリ名と同じにしてください
(もし、インストール先のディレクトリ指定できる場合は教えて下さい。。)

$ docker-compose run --rm node npx create-next-app sample-app

docker-compose up 実行

無事にnext-appのインストールが完了したら、アプリが起動できるはずです。
Welcomet to Next.js! が出れば成功です。

$ docker-compose up

スクリーンショット 2021-01-01 17.43.53.png

終わりに

今回はdocker-composeを使ってnext.jsの開発環境を構築しました。
docker-composeを使うと、APIコンテナ等と連携できるので、とても便利だなと思っています。
create-next-appコマンドもディレクトリ指定できるようにならないかな。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

dockerに苦労した話

今回の教材

Laravelでテスト駆動開発を学ぼう!

課題に取り組む前にLaravelのMigrateで沼にハマる

Reset

docker desktop のアンインストール
スタート -> 設定 -> アプリ(ふつーに消えてくれる)
image.png
explorerで普通に消そうとするとブルースクリーンが出て再起動になり、永遠に消せない(この時代にブルースクリーンなんて久しぶりに見たわ...)。powershell管理者モードでバチンと消すしか無いらしい
image.png

learning-laravel-tddというディレクトリが基準
PS C:\WINDOWS\system32> cd D:\OneDrive\dev
PS D:\OneDrive\dev> rm -Force learning-laravel-tdd

Docker Desktop for Windows のインストール

https://hub.docker.com/editions/community/docker-ce-desktop-windows/
インストール自体はすんなりいく

Docker 用 git リポジトリのクローン

OneDrive\dev>
$ mkdir learning-laravel-tdd
$ cd learning-laravel-tdd
$ git clone https://github.com/nunulk/learning-laravel-tdd-docker docker
$ mkdir app

現在の状態

learning-laravel-tdd
├── app
└── docker
Dockerを起動してからやってね
$ cd docker
$ cp .env.example .env
$ docker-compose up -d 

Portのかぶりを解決する(DB_PORTを3308に)

僕の場合は 3306 がかぶっていることがわかった(普段pythonで使ってるから)
image.png

learning-laravel-tdd\docker\.env
COMPOSE_PROJECT_NAME=learning-laravel-tdd
APP_PATH=../app
TZ=Asia/Tokyo
WEB_PORT=80
- DB_PORT=3306
+ DB_PORT=3308
DB_DATABASE=learning_laravel_tdd
DB_USERNAME=root
DB_PASSWORD=root
DB_TESTING_DATABASE=learning_laravel_tdd_testing
DB_TESTING_PORT=3307
DB_TESTING_USERNAME=root
DB_TESTING_PASSWORD=root

するとDockerのコントロールパネルでstartしたときに全部つく
image.png

動作確認

以下のコマンドを実行して、すべてのコンテナが起動しているかどうか確認

learning-laravel-tdd\docker>
$ docker-compose ps
              Name                             Command              State                 Ports
-------------------------------------------------------------------------------------------------------------
learning-laravel-tdd_app_1          docker-php-entrypoint php-fpm   Up      9000/tcp
learning-laravel-tdd_db-testing_1   docker-entrypoint.sh mysqld     Up      0.0.0.0:3307->3306/tcp, 33060/tcp
learning-laravel-tdd_db_1           docker-entrypoint.sh mysqld     Up      0.0.0.0:3308->3306/tcp, 33060/tcp
learning-laravel-tdd_web_1          nginx -g daemon off;            Up      0.0.0.0:80->80/tcp

アプリケーションの初期化

learning-laravel-tdd\docker>
$ docker exec -it learning-laravel-tdd_app_1 ash
# composer create-project --prefer-dist "laravel/laravel=7.*" .
learning-laravel-tdd\app\.env
# 中略

LOG_CHANNEL=stack


- DB_CONNECTION=mysql
- DB_HOST=127.0.0.1
- DB_PORT=3306
- DB_DATABASE=laravel
- DB_USERNAME=root
- DB_PASSWORD=
+ DB_CONNECTION=mysql
+ DB_HOST=db
+ DB_PORT=3306
+ DB_DATABASE=learning_laravel_tdd
+ DB_USERNAME=root
+ DB_PASSWORD=root
+ DB_TESTING_HOST=db-testing
+ DB_TESTING_PORT=3306
+ DB_TESTING_DATABASE=learning_laravel_tdd_testing
+ DB_TESTING_USERNAME=root
+ DB_TESTING_PASSWORD=root

BROADCAST_DRIVER=log

# 中略
learning-laravel-tdd\app\config\database.php
        'mysql' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
-           'port' => env('DB_PORT', '3306'),
+           'port' => env('DB_PORT', '3308'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
        ],


+       'mysql_testing' => [
+           'driver' => 'mysql',
+           'host' => env('DB_TESTING_HOST', '127.0.0.1'),
+           'port' => env('DB_TESTING_PORT', '3307'),
+           'database' => env('DB_TESTING_DATABASE', 'forge'),
+           'username' => env('DB_TESTING_USERNAME', 'forge'),
+           'password' => env('DB_TESTING_PASSWORD', ''),
+           'unix_socket' => env('DB_SOCKET', ''),
+           'charset' => 'utf8mb4',
+           'collation' => 'utf8mb4_unicode_ci',
+           'prefix' => '',
+           'prefix_indexes' => true,
+           'strict' => true,
+           'engine' => null,
+           'options' => extension_loaded('pdo_mysql') ? array_filter([
+               PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
+           ]) : [],
+        ],

         'pgsql' => [
             'driver' => 'pgsql',
             'url' => env('DATABASE_URL'),
learning-laravel-tdd\app\phpunit.xml
        <server name="CACHE_DRIVER" value="array"/>
-       <!-- <server name="DB_CONNECTION" value="sqlite"/> -->
-       <!-- <server name="DB_DATABASE" value=":memory:"/> -->
+       <server name="DB_CONNECTION" value="mysql_testing"/>
+       <server name="DB_DATABASE" value="learning_laravel_tdd_testing"/>       
        <server name="MAIL_MAILER" value="array"/>

Models ディレクトリの作成と User.php の移動

Laravel は、デフォルトでは Model クラスを artisan コマンドで生成すると app ディレクトリ直下に生成しますが、本教材では、Models ディレクトリを作って、そこに配置していきます。インストールで自動的に作られる User.php をあらかじめ Models ディレクトリに移しておきましょう。

まずは以下のコマンドを実行してディレクトリを作成します(コンテナ側でもホスト側でもどちらでも大丈夫です)。

learning-laravel-tdd\app
# mkdir app/Models

続いて、app/User.php を app/Models 以下へ移動し、名前空間を変更します。

learning-laravel-tdd\app\Models\User.php
namespace App\Models;

User クラスを参照している箇所の名前空間もあわせて変更します。

変更するのは以下の2つのファイルです。

learning-laravel-tdd\app\config\auth.php
'providers' => [
    'users' => [
        'driver' => 'eloquent',
-       'model' => App\User::class,
+       'model' => App\Models\User::class,
    ],
learning-laravel-tdd\app\database\factories\UserFactory.php
- use App\User;
+ use App\Models\User;

config is ignored

learning-laravel-tdd\docker\db\my.cnf を読み取り専用にする
Windowsだけの問題らしい

mysqld: [Warning] World-writable config file '/etc/mysql/my.cnf' is ignored. がでる
[Docker+Windows]mysqlのdockerイメージがmy.cnfのマウントのエラーで起動しない時の対処法

アプリケーションの確認

最後に、アプリケーションが動作するか確認するため、コンテナ内で以下のコマンドを実行してください。

/app # php artisan migrate
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

clang++ docker upgrade

docker(204) gcc(gnu), clang(llvm)コンパイルエラー・警告比較(4) R_07_04.c
https://qiita.com/kaizen_nagoya/items/73b9f16638273a74d807

で使いっていたdocker上のclang++をUpgradeしょうとしたらエラーが出た。

bin/bash
# apt update; apt -y upgrade
...

# clang++ --version
clang version 7.0.1-8+deb10u2 (tags/RELEASE_701/final)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
# apt upgrade clang++
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Note, selecting 'librust-bindgen+testing-only-libclang-5-dev' for regex 'clang+'
Note, selecting 'librust-clang-sys-0+clang-3-6-dev' for regex 'clang+'
Note, selecting 'librust-clang-sys-0.27.0+gte-clang-6-0-dev' for regex 'clang+'
Note, selecting 'clang-modernize-6.0' for regex 'clang+'
Note, selecting 'clang-tidy-6.0' for regex 'clang+'
Note, selecting 'librust-bindgen-0+testing-only-libclang-5-dev' for regex 'clang+'
Note, selecting 'librust-clang-sys-0.27.0+default-dev' for regex 'clang+'
Note, selecting 'clang' for regex 'clang+'
Note, selecting 'arcanist-clang-format-linter' for regex 'clang+'
Note, selecting 'librust-clang-sys-0.27.0+clang-4-0-dev' for regex 'clang+'
Note, selecting 'librust-bindgen+testing-only-libclang-3-9-dev' for regex 'clang+'
Note, selecting 'librust-clang-sys-0.27+clang-4-0-dev' for regex 'clang+'
Note, selecting 'clang-tools-6.0' for regex 'clang+'
Note, selecting 'librust-clang-sys-dev' for regex 'clang+'

...

clang is already the newest version (1:7.0-47).
clang-7 is already the newest version (1:7.0.1-8+deb10u2).
clang-7 set to manually installed.
libclang-common-7-dev is already the newest version (1:7.0.1-8+deb10u2).
libclang-common-7-dev set to manually installed.
libclang1-7 is already the newest version (1:7.0.1-8+deb10u2).
libclang1-7 set to manually installed.
Calculating upgrade... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 python-clang-6.0 : Conflicts: python-clang-x.y
 python-clang-7 : Conflicts: python-clang-x.y
E: Broken packages

# apt remove clang
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be REMOVED:
  clang
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
After this operation, 23.6 kB disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 28587 files and directories currently installed.)
Removing clang (1:7.0-47) ...

LLVM Debian/Ubuntu nightly packages
https://apt.llvm.org

# apt-get install clang-format clang-tidy clang-tools clang clangd libc++-dev libc++1 libc++abi-dev libc++abi1 libclang-dev libclang1 liblldb-dev libllvm-ocaml-dev libomp-dev libomp5 lld lldb llvm-dev llvm-runtime llvm python-clang
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package clangd
# 

gccのdockerを入れてやり直した。

# wget https://apt.llvm.org/llvm.sh
# chmod +x llvm.sh
# sudo ./llvm.sh 10
+ needed_binaries=(lsb_release wget add-apt-repository)
+ missing_binaries=()
+ for binary in "${needed_binaries[@]}"
+ which lsb_release
+ missing_binaries+=($binary)
+ for binary in "${needed_binaries[@]}"
+ which wget
+ for binary in "${needed_binaries[@]}"
+ which add-apt-repository
+ missing_binaries+=($binary)
+ [[ 2 -gt 0 ]]
+ echo 'You are missing some tools this script requires: lsb_release' add-apt-repository
You are missing some tools this script requires: lsb_release add-apt-repository
+ echo '(hint: apt install lsb-release wget software-properties-common)'
(hint: apt install lsb-release wget software-properties-common)
+ exit 4

# apt install lsb-release wget software-properties-common
# sudo ./llvm.sh 10

...

Reading package lists... Done
+ apt-get install -y clang-10 lldb-10 lld-10 clangd-10
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 lldb-10 : Depends: liblldb-10 (>= 1:9~svn298832-1~) but it is not going to be installed
           Depends: python3-lldb-10 but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

いまここ

Installing Clang 10 on Docker container
https://baykara.medium.com/installing-clang-10-in-a-docker-container-4c24a4538af2

Clang 10 in a Docker container for C++17 and C++20 development
https://solarianprogrammer.com/2017/12/14/clang-in-docker-container-cpp-17-development/

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【composer】【Laravel】メモリ不足でインストール出来ない時の対処法

概要

Composerを使用してLaravel Breezeをインストールする際にエラーが発生。

実行したコマンド

composer require laravel/breeze --dev

返ってきたエラー

Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 4096 bytes) in phar:///usr/bin/composer/src/Composer/DependencyResolver/Solver.php on line 223

環境

Laravel Framework 8.20.1
Docker version 20.10.0
Composer version 1.10.19

今回のエラー内容

  • どうやらメモリ不足でインストールできない様子。

解決方法

実行したコマンド

php -d memory_limit=-1 /usr/bin/composer require laravel/breeze --dev

-d memory_limit=-1とすることで、メモリを無制限でコマンドを実行することができる様子。

composerのトラブルシューティングにも記載がありました。
Memory limit errors

まとめ

phpのコンテナのdockerファイルがあるディレクトリに、php.iniを作成して設定を書き換えても対応できそう

php.ini
memory_limit = -1
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

DockerでRails + MySQLの環境構築

概要

https://docs.docker.com/compose/rails/ をMySQL用に作り替える。

手順:

  1. 構成ファイルの準備
    1. Dockerfile作成
    2. Gemfile作成
    3. entrypoint.sh作成
    4. docker-compose.yaml作成
  2. ビルド
    1. railsプロジェクトの初期化
    2. imageの更新
  3. DBと接続
  4. 表示確認

構成ファイルの準備

Dockerfile作成

FROM ruby:2.5
RUN apt-get update -qq && apt-get install -y nodejs build-essential libpq-dev
WORKDIR /app
COPY Gemfile /app/Gemfile
COPY Gemfile.lock /app/Gemfile.lock
RUN bundle install
COPY . /app

# Add a script to be executed every time the container starts.
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000

# Start the main process.
CMD ["rails", "server", "-b", "0.0.0.0"]

Gemfile作成

プロジェクトルートにGemfileを作っておく

source 'https://rubygems.org'
gem 'rails', '~>5'

Gemfile.lock を作っておく

touch Gemfile.lock

entrypoint.sh作成

#!/bin/bash
set -e

# Remove a potentially pre-existing server.pid for Rails.
rm -f /myapp/tmp/pids/server.pid

# Then exec the container's main process (what's set as CMD in the Dockerfile).
exec "$@"

docker-compose.yaml作成

db_data としてvolumeを作って、DBデータを永続化

version: "3"
services:
  db:
    image: mysql:8.0
    volumes:
      - db_data:/var/lib/mysql
    command: --default-authentication-plugin=mysql_native_password
    ports: 
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: root
      MYSQL_USER: admin
      MYSQL_PASSWORD: password
  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/app
    ports:
      - "3000:3000"
    depends_on:
      - db
volumes:
  db_data:

ビルド

Railプロジェクトつくる。

railsプロジェクトの初期化

webで rails new を実行して、railsを初期化。
Gemfileが自動的に更新される。

docker-compose run --no-deps web rails new . --force --database=mysql

imageの更新

Gemfileが更新されたので、イメージを再度ビルド。

docker-compose build

DBと接続

config/database.yml にDB設定を書き込む

default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: root
  host: db

development:
  <<: *default
  database: app_development

test:
  <<: *default
  database: app_test

production:
  <<: *default
  database: app_production
  username: app
  password: <%= ENV['APP_DATABASE_PASSWORD'] %>

表示確認

コンテナ立ち上げ

docker-compose up -d

DB作成

docker-compose run web rake db:create

http://localhost:3000 に接続して動作確認。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Docker コマンド一覧

###Docker 一覧
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

centos6を使っていたdocker環境でサポート切れを対応する

原因

12月に入ってから今まで使えていたDocker環境が立ち上げられなくなっていたので調べたところ、centos6が11月末でサポート切れ(End Of Life)になったことに伴いepelパッケージが導入できなくなっていた。

変更前

RUN rpm -ivh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

リポジトリの場所が404になっていたので、アーカイブのディレクトリを参照するように変更。

変更後

FROM centos:6
RUN sed -i "s|#baseurl=|baseurl=|g" /etc/yum.repos.d/CentOS-Base.repo
RUN sed -i "s|mirrorlist=|#mirrorlist=|g" /etc/yum.repos.d/CentOS-Base.repo
RUN sed -i "s|http://mirror\.centos\.org/centos/\$releasever|https://vault\.centos\.org/6.10|g" /etc/yum.repos.d/CentOS-Base.repo
RUN rpm -ivh http://dl.fedoraproject.org/pub/archive/epel/6/i386/epel-release-6-8.noarch.rpm

参考にした記事

http://smoogespace.blogspot.com/2020/10/rhel-6centos-6scilin-6epel-6-end-of.html
https://qiita.com/y-do/items/b23d24a647cb99528b16

ほんとはサポート切れに伴ってcentos7にアップデートするのがベストだと思いますが、大人の事情でできないやつもありますよね。。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Gemを追加してbuildしたら「Could not find XXX in any of the sources」のエラーが出てハマった時に行ったこと

概要

「Could not find XXX in any of the sources」が出て1時間半ほどハマったので解決の過程をメモとして残しておく。

状況

「rails-controller-testing」をGemfileに追加してdocker-compose buildし、ビルドが完了したのを確認してテストを実行したところエラーをはいた。

Could not find rails-controller-testing-1.0.5 in any of the sources
Run `bundle install` to install missing gems.

追加したGemが見つからないと言われてるらしい。指示に従ってdocker-compose run web bundle installを実行。再びテストを実行するも同じエラーを吐いた。

試したこと

・Gemfileで指定されてる書き方をしているか
 →問題なし。指定通りに記載されている。
・rails-controller-testing-1.0.5のバージョンは対応しているか
 →rubygems.orgで確認したが、1.0.5は対応してるので問題なし。
・springを停止して試したらどうなるか
 →springを停止しようとすると上記のエラーを吐くのでそもそも停止できない。
・bundleのパスは正しいか
 →which bundleで確認したが、./rbenv配下をみてるので問題なし。
・変にキャッシュが残っているんじゃないか
 →docker-compose build —no-cacheを実行するも変わらず。

解決したやつ

Gemfile.lockを削除して再度bundle installし、テストを実行したところ別のエラーを吐いた。

ERROR: No container found for web_1

今度はコンテナが見つからないと言われているらしい。


docker-compose upでコンテナを起動してどんなログが出るか確認してみることに。そしたら以下のエラーを吐いているのを確認。

web_1  | Could not find sass-rails-5.1.0 in any of the sources
web_1  | Run `bundle install` to install missing gems.
rails_web_1 exited with code 7

今度は別のGemが見つからないと言われてるらしい。。。
今回も指示に従ってbundle installしてコンテナを再起動したけどエラーは変わらず。


bundle installでバージョンが変わったのかと思い、rubygems.orgでsass-railsのバージョンを確認してみるも、5.1.0は対応している。


installがダメだったので、何となくbuildを試してみたらエラーが消えて正常にコンテナを起動できた。テストを実行したところ無事にテストできた。

Finished in 0.67023 seconds (files took 17.96 seconds to load)
3 examples, 0 failures

結論

原因もなぜ解決できたのかも全くわからないけど、僕の場合はGemfile.lockを削除してbundle installとbuildすることで解決できた。

「Could not find XXX in any of the sources」とか情報少なすぎだしもうちょっと長いエラー吐いて欲しい。

参考記事

https://carefree-se.hatenablog.com/entry/2015/07/22/125904
https://qiita.com/jnchito/items/44ab1df134369ed76911
https://qiita.com/nakanowax/items/fe07e8ccd1721befebeb
https://fuqda.hatenablog.com/entry/2019/03/21/204118

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

HerokuにDockerのコンテナをpushするときに出たエラー「no basic auth credentials」の解決策

問題

HerokuにDockerのコンテナをコマンド「heroku container:push web」にてpushしようとすると、下記エラーが発生する。

no basic auth credentials
 !    Error: docker push exited with Error: 1

解決策

下記コマンドにてherokuにログインする。

heroku container:login

参考

  1. stackoverflow:『Deploy docker images to heroku』
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Docker上のRailsでコントローラーの変更がブラウザに反映されない時の対処法

問題

controller.rbの変更がブラウザに反映されない。
コンテナを再起動すれば反映されるが、毎回再起動するのは手間がかかる。

環境

Windows 10 home
Docker for Windows
Rails 6.1
Ruby 2.7

解決策

config\environments\development.rb内の
config.file_watcher = ActiveSupport::EventedFileUpdateCheckerを下記コードに修正する。

config.file_watcher = ActiveSupport::FileUpdateChecker

わからないこと

下記コードを記載しても解決できる。
Railsガイドを見ても上記コードとの違いがわからなかったので、違いが分かる人がいましたら、ご教授いただければ幸いです。

config.reload_classes_only_on_change = false

参照:『Railsガイド』- Rails アプリケーションを設定する

参考

  1. Rails5でmodelやcontrollerの修正が反映されないやつ
  2. Vagrant + Rails 6.0.2.1 のdevelopmentでコード変更が反映されない現象を解決
  3. 【Rails6】Dockerコンテナを再起動しないとソースコードが反映されない
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

laravel-filemanagerをインストールするときにつまづいたこと

CKEditorを導入

参考サイト
ブログ記事等のエディタを実装する際はCKEditor!さらに便利でカッコよく使い易く!サンプルソースあり

   <textarea id="ckeditor" name="pageBody"></textarea>

    {{-- CKEditor --}}
    <script src="//cdn.ckeditor.com/4.15.0/full/ckeditor.js"></script>
    <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
    <script src="js/ckeditor.js"></script>
$(function () {
    // エディタへの設定を適用する
    CKEDITOR.replace("ckeditor", {
        uiColor: "#EEEEEE",
        height: 400,

        // スペルチェック機能OFF
        scayt_autoStartup: false,

        // Enterを押した際に改行タグを挿入
        enterMode: CKEDITOR.ENTER_BR,

        // Shift+Enterを押した際に段落タグを挿入
        shiftEnterMode: CKEDITOR.ENTER_P,

        // idやclassを指定可能にする
        allowedContent: true,

        // ファイルマネージャー関連
        filebrowserImageBrowseUrl: "/laravel-filemanager?type=Images",
        filebrowserImageUploadUrl:
            "/laravel-filemanager/upload?type=Images&_token=",
        filebrowserBrowseUrl: "/laravel-filemanager?type=Files",
        filebrowserUploadUrl: "/laravel-filemanager/upload?type=Files&_token=",

        // preコード挿入時
        format_pre: {
            element: "pre",
            attributes: {
                class: "code",
            },
        },
        // タグのパンくずリストを削除
        removePlugins: "elementspath",
        // webからコピペした際でもプレーンテキストを貼り付けるようにする
        forcePasteAsPlainText: true,
        // 自動で空白を挿入しないようにする
        fillEmptyBlocks: false,
        // タブの入力を無効にする
        tabSpaces: 0,
    });

$(function () {
    // エディタへの設定を適用する
    CKEDITOR.replace("ckeditor", {
        uiColor: "#EEEEEE",
        height: 400,

        // スペルチェック機能OFF
        scayt_autoStartup: false,

        // Enterを押した際に改行タグを挿入
        enterMode: CKEDITOR.ENTER_BR,

        // Shift+Enterを押した際に段落タグを挿入
        shiftEnterMode: CKEDITOR.ENTER_P,

        // idやclassを指定可能にする
        allowedContent: true,

        // ファイルマネージャー関連
        filebrowserImageBrowseUrl: "/laravel-filemanager?type=Images",
        filebrowserImageUploadUrl:
            "/laravel-filemanager/upload?type=Images&_token=",
        filebrowserBrowseUrl: "/laravel-filemanager?type=Files",
        filebrowserUploadUrl: "/laravel-filemanager/upload?type=Files&_token=",

        // preコード挿入時
        format_pre: {
            element: "pre",
            attributes: {
                class: "code",
            },
        },
        // タグのパンくずリストを削除
        removePlugins: "elementspath",
        // webからコピペした際でもプレーンテキストを貼り付けるようにする
        forcePasteAsPlainText: true,
        // 自動で空白を挿入しないようにする
        fillEmptyBlocks: false,
        // タブの入力を無効にする
        tabSpaces: 0,
    });
});

// 保存アイコンの無効化
CKEDITOR.plugins.registered["save"] = {
    init: function (editor) {
        var command = editor.addCommand("save", {
            modes: { wysiwyg: 1, source: 1 },
            exec: function (editor) {
                if (My.Own.CheckDirty()) My.Own.Save();
                else alert("No changes.");
            },
        });
        editor.ui.addButton("Save", { label: "", command: "save" });
    },
};
});

CKEditorに画像のアップロード機能を導入する

参考サイト
Laravelのファイル管理ライブラリ Laravel File Manager

インストールしようとするとエラーが出力された

composer require unisharp/laravel-filemanager

Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Installation request for unisharp/laravel-filemanager ^2.2 -> satisfiable by unisharp/laravel-filemanager[v2.2.0].
    - unisharp/laravel-filemanager v2.2.0 requires ext-exif * -> the requested PHP extension exif is missing from your system.
  • PHPで画像からEXIF情報を取得するためにEXIFモジュールが必要らしい

参考サイト
docker上のPHPでEXIFを使えるようにする

DockerFileに以下を追加し再度ビルドする

RUN docker-php-ext-install exif
RUN docker-php-ext-configure exif \
            --enable-exif

もう一度インストールすると無事に成功した!

composer require unisharp/laravel-filemanager
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel-filemanagerをインストールするときにつまづいたこと

CKEditorを導入

参考サイト
ブログ記事等のエディタを実装する際はCKEditor!さらに便利でカッコよく使い易く!サンプルソースあり

   <textarea id="ckeditor" name="pageBody"></textarea>

    {{-- CKEditor --}}
    <script src="//cdn.ckeditor.com/4.15.0/full/ckeditor.js"></script>
    <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
    <script src="js/ckeditor.js"></script>
$(function () {
    // エディタへの設定を適用する
    CKEDITOR.replace("ckeditor", {
        uiColor: "#EEEEEE",
        height: 400,

        // スペルチェック機能OFF
        scayt_autoStartup: false,

        // Enterを押した際に改行タグを挿入
        enterMode: CKEDITOR.ENTER_BR,

        // Shift+Enterを押した際に段落タグを挿入
        shiftEnterMode: CKEDITOR.ENTER_P,

        // idやclassを指定可能にする
        allowedContent: true,

        // ファイルマネージャー関連
        filebrowserImageBrowseUrl: "/laravel-filemanager?type=Images",
        filebrowserImageUploadUrl:
            "/laravel-filemanager/upload?type=Images&_token=",
        filebrowserBrowseUrl: "/laravel-filemanager?type=Files",
        filebrowserUploadUrl: "/laravel-filemanager/upload?type=Files&_token=",

        // preコード挿入時
        format_pre: {
            element: "pre",
            attributes: {
                class: "code",
            },
        },
        // タグのパンくずリストを削除
        removePlugins: "elementspath",
        // webからコピペした際でもプレーンテキストを貼り付けるようにする
        forcePasteAsPlainText: true,
        // 自動で空白を挿入しないようにする
        fillEmptyBlocks: false,
        // タブの入力を無効にする
        tabSpaces: 0,
    });
};

CKEditorに画像のアップロード機能を導入する

参考サイト
Laravelのファイル管理ライブラリ Laravel File Manager

インストールしようとするとエラーが出力された

composer require unisharp/laravel-filemanager

Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Installation request for unisharp/laravel-filemanager ^2.2 -> satisfiable by unisharp/laravel-filemanager[v2.2.0].
    - unisharp/laravel-filemanager v2.2.0 requires ext-exif * -> the requested PHP extension exif is missing from your system.
  • PHPで画像からEXIF情報を取得するためにEXIFモジュールが必要らしい

参考サイト
docker上のPHPでEXIFを使えるようにする

DockerFileに以下を追加し再度ビルドする

RUN docker-php-ext-install exif
RUN docker-php-ext-configure exif \
            --enable-exif

もう一度インストールすると無事に成功した!

composer require unisharp/laravel-filemanager
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Docker環境でDBに接続するとcould not find driverが出たときの対処方法

DBに接続する処理を作成

<?php
define('DB_NAME', 'データベース名');
define('USER_NAME', 'ユーザー名');
define('USER_PASS', 'パスワード');

try {
  $pdo = new PDO(
    DB_NAME,
    USER_NAME,
    USER_PASS,
    [
      PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
      PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ,
      PDO::ATTR_EMULATE_PREPARES => false
    ]
  );
} catch (PDOException $e) {
  echo $e->getMessage();
  exit;
}

接続すると下記のエラーが出力された

could not find driver

ドライバが見つからないようなので現在のドライバを確認してみる

php -m | grep pdo

# pdo_sqlite

pdo_mysqlがインストールされていないのが原因らしいのでDockerFileに処理を追加する

FROM php:7.2-fpm
COPY php.ini /usr/local/etc/php/

# 追加
RUN docker-php-ext-install pdo_mysql

再度ビルドすると無事に接続できた!

参考資料【Laravel】CentOSのLAMP環境でcould not find driver

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む