tomomik’s blog

とりあえずのメモ 違ってたらゴメンなさい

ansible_specでsudoパスワードを指定する

ansible_spec いいなぁ! いいところは他のサイトの紹介を参考していただくとして sudoパスワードを指定するときに困ったのでその解決方法をメモ。

普通に下記のようにしても動いてくれない

bundle exec rake serverspec:Ansible-Sample-TDD ASK_SUDO_PASSWORD=1

spec_helper.rb の ENV['ASK_BECOME_PASSWORD'] ってなっているところが原因かな?

when 'ssh'
#
# OS type: UN*X
#
  set :backend, :ssh

  if ENV['ASK_BECOME_PASSWORD']
    begin
      require 'highline/import'
    rescue LoadError
      fail "highline is not available. Try installing it."
    end
    set :become_password, ask("Enter become password: ") { |q| q.echo = false }
  else
    set :become_password, ENV['BECOME_PASSWORD']
  end

ENV['ASK_BECOME_PASSWORD']を ENV['ASK_SUDO_PASSWORD']に変更してみたら sudoパスワードを指定できました。

もっと良い方法あるかと思いますが…

Let's Encryptを導入しようとしたら Client with the currently selected authenticator does not support any combination of challenges that will satisfy the CA. って出た

さくらのVPSで Let’s Encrypt を導入しようとしたら

Client with the currently selected authenticator does not support any combination of challenges that will satisfy the CA.

というエラーメッセージが出た時のした事のメモ。

下記を参考に作業を開始。( OSはCentOS 7)

ネコでもわかる!さくらのVPS講座 ~第六回「無料SSL証明書 Let’s Encryptを導入しよう」 | さくらのナレッジ

yum install certbot python2-certbot-apache
certbot --apache -d example.com

上記のコマンドでタイトルのエラーが発生した。

調べるとCertbotを最新版にしないといけないようだ。

community.letsencrypt.org

最新版を取得

wget https://dl.eff.org/certbot-auto
chmod a+x ./certbot-auto
./certbot-auto --version

webサーバーが動作中だったので、 Webroot プラグインSSL/TLS 証明書を発行

./certbot-auto certonly --webroot -w /var/www/example.com/htdocs -d example.com

Certbotの使い方は、「Let's Encrypt 総合ポータル」を参考にしました。 letsencrypt.jp

Herokuで独自ドメインの設定とSSL接続の設定

Herokuで独自ドメインの設定とSSLの設定をしたときのメモ (HerokuのDynoはHobbyを利用している前提です)

独自ドメインの設定

DNSの設定
ホスト名 TYPE VALUE
独自ドメイン CNAME アプリ名.heroku.com
Herokuの設定
$ heroku domains:add 独自ドメイン
追加したドメインの確認
$ heroku Domain

Domain Name   DNS Target
────────  ────────────
独自ドメイン  独自ドメイン.heroku.com

これでホスト名に指定した独自ドメインにアクセスするとHerokuのアプリにアクセスできます。

SSL接続の設定

freeプランだと以下の設定は出来ません。 DNSの設定を変更します。

DNSの設定
ホスト名 TYPE VALUE
独自ドメイン CNAME 独自ドメイン.herokudns.com
Herokuの設定

アプリのSettingsの「Domains and certificates」にある 「Configure SSL」を選択

「Automatically configure using Automated Certificate Management」を選択してContinueを押す

yourapp.herokuapp.com -> yourdomain.herokudns.com という説明がありますが、DNSで設定しているので 「I’ve done this」を選択 暫くすると httpsで接続できるようになります。

$ heroku Domain

Domain Name   DNS Target
────────  ────────────
独自ドメイン  独自ドメイン.herokudns.com

また設定におかしなところがあればHerokuのNotificationsにメッセージがくるので その内容を確認するとよいです。

最後に

下記の記事のほうが分かりやすいです kayakuguri.github.io

PHPExcelで画像をはりつけたExcelをつかうと502エラーになる(PHP 7.0.19)

PHPExcelを使う時にテンプレートを用意して、必要な内容をPHPで書き込むと思います。 テンプレートにロゴとか社印とか画像ファイルをつけたりすると思うのですが、 PHPのバージョンが違うと502のエラーになりました。 テンプレートにしたExcelファイルはXLSX形式です。

PHP 7.0.15 だと問題なかったのですが、PHP 7.0.19だと502エラー

処理が失敗している箇所はPHPExcelの Writer/Excel2007/ContentTypes.php のgetImageMimeType。

getImageMimeTypeでExcelファイルにある画像の拡張子を取得しているのですが、 XLSX形式のファイルをzipで解凍してExcelファイルに含まれている画像のパスからだと getimagesize関数では失敗するようです。 PHP 7.0.15で問題なくってPHP 7.0.19で失敗するのか分かりません(涙

とりあえず、テンプレートのファイルをxls形式にすると この問題は発生しませんでした。

私の環境だけかもしれないですが念のためーー

FuelPHPでPHPUnitを使用するときに'PHPUnit_Framework_TestCase' not found って出た

タイトルの通りですが、下記のエラーがでました。 FuelPHPのバージョンは1.8です。

$ php oil test --group=App
Tests Running...This may take a few moments.
PHP Fatal error:  Class 'PHPUnit_Framework_TestCase' not found in /var/www/html/project/fuel/core/classes/testcase.php on line 19

Fatal error: Class 'PHPUnit_Framework_TestCase' not found in /var/www/html/project/fuel/core/classes/testcase.php on line 19
Fatal Error - Class 'PHPUnit_Framework_TestCase' not found in COREPATH/classes/testcase.php on line 19

PHPUnitのバージョンは6です。 なんでかなーと思ってると下記の記事を見つけました。

PHPテストフレームワーク「PHPUnit 6.0」リリース | OSDN Magazine

 PHPUnit 6.0では、PHP 5.6がサポート対象外となり、PHPはバージョン7と7.1をサポートする。PHPUnit_Framework_TestCaseがPHPUnit\Framework\TestCaseとなるなど、コードユニットが名前空間化された。

ということなので fuel/core/classes/testcase.php の extends 以降を修正しました。

abstract class TestCase extends \PHPUnit\Framework\TestCase { }

とりあえず、エラーがなくなって PHPUnit が動きました。

修正の方法はもっと別の方法があるような気がするなあ。

WordPressでプラグインなしで全てのカテゴリーを取得する

get_categories関数を使えばカテゴリーが取得できます。

get_categories('get=all');

get_categories関数のパラメーターに get=all を指定すること。

関数リファレンス/get categories

パラメーターなしだとカテゴリーの中で投稿に紐付いてないカテゴリーは取得されないと思います。

get_categoryだとその投稿のカテゴリーしか取得出来なかったです。

function.phpなどに以下のようにして書いて関数を呼んでやれば全てのカテゴリーを表示させられるはずです。

<?php 
function get_all_categories(){
  $all_categories;

  $categories = get_categories('get=all'); 
  foreach ($categories as $category) {
    $all_categories .= $category->cat_name;
  }

 return $all_categories;
}
 ?>