Macでssh-copy-id
Linuxのssh-copy-idが楽すぎるのでMacでも使いたい時のメモ。
環境
OSX EICapitan
CakePHPでマイグレーションしてみる
mysqlに入って直接createせずにcakeコマンドでテーブルを作ってみる。
環境
CentOS7
CakePHP3
MySQL 5.7
マイグレーション
ブログチュートリアルのarticlesテーブルをマイグレーションしてみる。
$ bin/cake bake migration CreateArticles id title:string body:text created modified 2017-08-14 10:54:00 Error: [PDOException] SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'id' in /var/www/html/blog_tutorial/vendor/robmorgan/phinx/src/Phinx/Db/Adapter/PdoAdapter.php on line 338
idカラムは最初からあるのでカラム設定する必要ないっぽい。
というか入れるとすでにあるんですけどってエラーになる。
やり直し。
$ bin/cake bake migration CreateArticles title:string body:text created modified
できたマイグレーションファイルが以下。
<?php use Migrations\AbstractMigration; class CreateArticles extends AbstractMigration { /** * Change Method. * * More information on this method is available here: * http://docs.phinx.org/en/latest/migrations.html#the-change-method * @return void */ public function change() { $table = $this->table('articles'); $table->addColumn('title', 'string', [ 'default' => null, 'limit' => 255, 'null' => false, ]); $table->addColumn('body', 'text', [ 'default' => null, 'null' => false, ]); $table->addColumn('created', 'datetime', [ 'default' => null, 'null' => false, ]); $table->addColumn('modified', 'datetime', [ 'default' => null, 'null' => false, ]); $table->create(); } }
createdとmodifiedはカラム名だけで察してくれて勝手に設定してくれる様子。
これを実行するには
$ bin/cake migrations migrate
と叩く。
これでテーブルが生成される。
補足 ブログチュートリアル注意点
このテーブル設定のままブログチュートリアルの
INSERT INTO articles (title,body,created) VALUES ('タイトル', 'これは、記事の本文です。', NOW()); INSERT INTO articles (title,body,created) VALUES ('またタイトル', 'そこに本文が続きます。', NOW()); INSERT INTO articles (title,body,created) VALUES ('タイトルの逆襲', 'こりゃ本当にわくわくする!うそ。', NOW());
のクエリを実行しようとするとmodifiedカラムのNOT NULLに引っかかる。
その場合は以下のINSERT文に直して対応。
INSERT INTO articles (title,body,created,modified) VALUES ('タイトル', 'これは、記事の本文です。', NOW(), NOW()); INSERT INTO articles (title,body,created,modified) VALUES ('またタイトル', 'そこに本文が続きます。', NOW(), NOW()); INSERT INTO articles (title,body,created,modified) VALUES ('タイトルの逆襲', 'こりゃ本当にわくわくする!うそ。', NOW(), NOW());
MySQL日本語対応
初期設定で日本語をINSERTすると文字化けする。
環境
CentOS7
my.cnf設定
$ sudo vi /etc/my.cnf
以下を加筆。
[mysql] default-character-set=utf8 [mysqld] character-set-server=utf8
MySQL再起動。
$ sudo systemctl restart mysqld
設定確認。
$ mysql -u root -p mysql>status Server characterset: utf8 Db characterset: utf8 Client characterset: utf8 Conn. characterset: utf8
文字コードがutf8になっていればOK。
CakePHP HerokuでHelloWorld
とりあえずHelloWorldまで。
環境
ローカル vagrant CentOS7
公開 Heroku
ローカル環境構築
VirtualBoxのCentOS7にCakePHPを導入する - Qiita
CakePHP環境構築。
HerokuToolbeltインストールにはrubyが必要 - americandog1993の日記
HerokuToolbeltも入れておく。
HelloController.php
手元の『CakePHP3入門』を見ながら書いた。
$ touch src/Controller/HelloController.php
// src/Controller/HelloController.php <?php namespace App\Controller class HelloController extends AppController { public $name = 'Hello'; public $autoRender = false; public function index(){ echo "Hello World"; } }
routes.php
ルーティング設定。
// config/routes.php Router::scope('/', function (RouteBuilder $routes) { /** * Here, we are connecting '/' (base path) to a controller called 'Pages', * its action called 'display', and we pass a param to select the view file * to use (in this case, src/Template/Pages/home.ctp)... */ // $routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']); $routes->connect('/', ['controller' => 'Hello', 'action' => 'index']);
Herokuデプロイ設定
Herokuデプロイの設定は以下を参考に。
CakePHP3をHerokuで動かす設定 - Qiita
$ heroku config:add CAKE_ENV="heroku"
config/bootstrap.php
// Load an environment local configuration file.
// You can use a file like app_local.php to provide local overrides to your
// shared configuration.
//Configure::load('app_local', 'default');
if (isset($_ENV['CAKE_ENV'])) {
Configure::load('app_' . $_ENV['CAKE_ENV'], 'default');
}
Procfile
Webサーバとルートディレクトリの設定。
$ touch Procfile $ vi Procfile
web: vendor/bin/heroku-php-apache2 webroot
デプロイ
$ git init $ heroku create アプリ名 $ git add . $ git commit -m "first commit" $ git push heroku master
HerokuToolbeltインストールにはrubyが必要
環境
vagrant CentOS7
エラー
CentOS7にheroku toolbeltをインストール - Qiita
これ見ながらphp開発環境でherokutoolbelt入れようとしたらエラー。
/usr/bin/env: ruby: そのようなファイルやディレクトリはありません
Cloud9利用時やRoR開発では引っかからなかったが、HerokuToolbeltを動かすにはどうもrubyが必須っぽい。
~/.ssh/configに接続先VPSを登録
環境
CentOS7
動機
$ ssh -p 22 user@xxx.xxx.xx.xx
毎回これを打つのに嫌気が差してきたので。
接続先登録
.sshディレクトリ下のconfigファイルで設定できる。
自分の場合は最初の状態でconfigファイルがなかったので作成した。
$ sudo touch ~/.ssh/config $ sudo vi ~/.ssh/config
以下の形式で設定する。
Host myvps(任意の名前) HostName xxx.xxx.xx.xx(IPアドレス。ドメイン設定済の場合はドメイン名でも良い) User username(接続先VPSのユーザ名) Port 22(ssh接続で使うポート番号) IdentityFile ~/.ssh/id_rsa(秘密鍵)
これで楽にログインできるようになる。
$ ssh myvps
ライブ中、観客がバンドにスマホで野次を飛ばせるWebアプリを作った
趣味でアマチュアロックバンドをやっている。
活動歴だけは無駄に長いが、無名のバンドなので、ライブでは客がシーンとしていることも少なくない。
MCでレスポンスを求めても、何も返ってこないことがよくある。
それは、こちらの演奏とか、パフォーマンスとか、喋りに原因があるのかもしれないが、自分は楽観的なので、「客側がシャイなのだろう」と考えている。
実際、アマチュアバンドのライブのあの微妙な空気の中で、客席側から声をあげるのはけっこう勇気のいることだと思う。
そこで、シャイな人でもライブ中に周囲へ感情を表現できるようなWebアプリを作ってみた。
コンセプト
- スマホを使って匿名でバンド側に野次を飛ばせる。
- 野次は会場全員が見ることができる。
- ダウンロードの手間がかかるのでネイティブアプリにしない。URLにアクセスするだけで使えるWebアプリ。
- ユーザ登録とか客の面倒になる機能は一切入れない。シンプルに作る。
使用技術
- RubyonRails
- jQuery
- Bootstrap
- PostgreSQL
- Heroku
作ったWebアプリ
テキスト野次
テキスト野次。直球の命名である。
まず、バンドが演奏するステージ側にスクリーンを設置する。
スクリーンにはステージ側表示用のライブページを表示させておく。
客が使う投稿用のページでは過去の投稿ログを見れる。対して、ライブページでは最新の投稿1件のみ表示させている。
ステージ上のスクリーンには、1つの投稿を大きく表示した方が見やすいと考えたためである。
投稿された野次はAjax通信で毎秒更新表示される。