Debug My Life.

いろいろデバッグをがんばるブログ。

jQueryでaタグの特定リンクのみ有効化する方法

放置してた技術ブログを少しずつ再開しないとなと思っていたところ、jQueryではまったところが出てきたのでメモ更新。

プレビュー画面のようなものを作っている時、プレビューの機能的には見た目のみの確認で、リンク先に遷移させると機能的によろしくないときはHTMLのリンクaタグを無効化したい。それはjQueryで以下のように簡単に制御できる。

  $(function(){
      $('a').click(function(){
          return false;
      })
  });

これはaタグすべてが無効化になるが、一部有効化しておきたい場合がある。その場合は、aタグ内にclassを設定し、そのクラスの有無で条件分岐すればよいらしい。

<a href="../sample.html" class="enable">

有効化したいaタグに class="enable" を追加。
特定クラスの有無の分岐はhasClassメソッドを使う。

  $(function(){
      $("a").click(function(e){
          if($(e.target).hasClass("enable")) {
              return true;
          } else {
              return false;
          }
      });
  });

これでclass="enable"を持つリンクのみ有効化され、それ以外の普通のaタグはすべてリンクが無効化になる。

また、特定リンクのみ無効化する方法は、例えばaタグ内にclass="disable"を設定し、hasClassを使わずに以下の書き方でできる。

  $(function(){
      $('a.disable').click(function(){
          return false;
      })
  });

特定リンクのみ無効化する方法についてはググるとたくさんでてくるけど、全体のリンクを無効化しつつ、一部有効化する方法がググってもあまり見当たらなかったので、調べつつ試行錯誤してなんとかできた。

他にもLaravelネタで更新することはあるけど、結局面倒で後回しになってる・・・。
本当は週1くらいで更新していきたいところなのだけど。土日どちらか1回は更新目標にしよう。

php artisan migrateのエラー確認方法

LaravelのMigrationファイルをDBに反映するコマンド:php artisan migrateを実行してエラーになったときに、以下のようにコンソール上はエラー箇所がよく分からないことが多い。

php artisan migrate
Migration table created successfully.

  [Illuminate\Database\QueryException]
  SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'users' already exists (SQL: create table `users` (`id` int unsigned not null auto_increment primary key, `name  
  ` varchar(255) not null, `email` varchar(100) not null, `password` varchar(255) not null, `remember_token` varchar(100) null, `created_at` timestamp null, `updated_at` timest  
  amp null) default character set utf8mb4 collate utf8mb4_unicode_ci)           

  [PDOException]
  SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'users' already exists  

一見Migration table created successfully.と出力されているから正常終了しているように見えるけど、作成されたテーブルをmysqlのshow tables;で確認すると、複数あるMigrationファイルの一つでエラーになって、すべてのMigrationファイルが実行されていないことがわかる。

こういうときは、storage/logs/laravel.logをチェックするとエラーとなっているmigrationファイルを特定できる。そして、普通に参照すると余計なエラーメッセージも出力されて一見わかりにくいので、以下のコマンドのように実行日付をgrepでパイプで渡してやると、ピンポイントで該当エラーファイルを特定できるのでおすすめ。

tail -200 storage/logs/laravel.log | grep 2017-02-01
[2017-02-01 20:38:02] local.ERROR: Symfony\Component\Debug\Exception\FatalThrowableError: Class 'Scheme' not found in /var/www/mice/laravel/database/migrations/2017_01_29_203457_create_mst_objectives_table.php:16
[2017-02-01 20:38:48] local.ERROR: Symfony\Component\Debug\Exception\FatalThrowableError: Call to undefined function create() in /var/www/mice/laravel/database/migrations/2017_01_29_203501_create_mst_lines_table.php:16

あと、途中までMigrationファイルで作成さたテーブルがある状態で、再度php artisan migrateをやるとすでに同名の既存テーブルがあるとエラーになってしまうので、php artisan migrate:rollback(一つ前にロールバック)かphp artisan migrate:reset(全マイグレーションロールバック)で重複テーブルがない状況にしてmigrateを再実行すれば良い。

マイグレーションと初期値設定 5.dev Laravel

migrationsテーブルに操作履歴が残っているので、このテーブルの中身を手動でdeleteするとphp artisan migrate:rollbackを実行しても戻せるロールバックがないというようなエラーになるので注意。そうなってしまって、不要テーブルを消すときはdrop table テーブル名で地道に消していくしかない。

エラーが出るとブログ書くネタができた!!、などと思いながら最近はいろいろやっているかな。

MySQLのroot権限がなくなったときの対処(mysqlデータベースが消えた)

MySQL(正確にはMariaDB)をvagrantの仮想環境サーバで使っていたのだけど、なぜかroot権限でログインしてもcreate databaseなどがアクセス拒否でエラーになった。正確なエラーは以下。

Access denied for user ‘root’@’localhost’ (using password: NO)

以下簡易メモ的に対処方を示しておく。詳細な実行結果も示したいが、iterm2のスクロールが該当箇所まで上に行かないので(次から自動ログ出力した)箇条書きで。
iterm2でターミナルログを自動的に取得させる | 俺的備忘録 〜なんかいろいろ〜

  1. show databases;でデータベースを確認するとなぜかmysqlが消えている(原因はこれ)
  2. service mysql stopでmysqlのサービスを停止する
  3. /var/lib/mysql/以下のファイルを全部削除
  4. sudo yum remove mariadbmariadbをアンインストール
  5. sudo yum install mariadb-serverでmariadbを再インストール(これだけで関連するものは全部インストールされるっぽい)
  6. service mysql startでmysqlサービスを起動
  7. mysql -u rootでログイン

そしてmysqlデータベースが存在することを確認。

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+

なぜmysqlデータベースが消えたのかは謎・・・・。あと、再インストールした直後はmysqlがすぐに反映されなくて、少し時間をおいてrootでmysqlに再ログインすると反映された。これも謎。とにかく、解決できてよかった。

php artisan migrate時でのエラー対処(ユーザ権限まわり)

migrationファイルをすでに作成済みでphp artisan migrateで実際にmigrationファイルをDBに反映するときに以下のエラーが出た。

[vagrant@dev-wb01 samplesystem]$ php artisan migrate

  [Illuminate\Database\QueryException]
  SQLSTATE[HY000] [2002] Connection refused (SQL: select * from 
   information_schema.tables where table_schema = sampleblog and 
   table_name = migrations)

  [PDOException]
  SQLSTATE[HY000] [2002] Connection refused

英文エラーが出ると意味をよく理解する前についググってしまうが、大抵英語サイトが引っかかって、結局思ったような解決策ページにたどり着かない時がある。なので、まずはしっかりエラーメッセージを読むとDBに接続ができてないようだ。ということは.envファイルの設定値がおかしいと推測し、.envファイルのDB_HOSTを確認すると、そこが全然違う仮想環境を指定していた。そこを修正で解消。

再度migrateを実行すると今度は以下のエラーが。

[vagrant@dev-wb01 samplesystem]$ php artisan migrate

  [Illuminate\Database\QueryException]
  SQLSTATE[HY000] [1130] Host '10.0.0.11' is not allowed to connect to this MariaDB server (SQL:  select * from 
information_schema.tables where table_schema = sampleblog and 
 table_name = migrations)
  [PDOException]
  SQLSTATE[HY000] [1130] Host '10.0.0.11' is not allowed to connect to this MariaDB server

いろいろ調べるとhost 10.0.0.11(一応これはVirtual Boxの仮想環境)に権限が設定されていないっぽいので、権限を設定する必要があるようだ。migrateしたいとこのDB(ここではMariaDB)に入って以下のように10.0.0.11から接続するrootに全権限を設定。

MariaDB [(none)]> grant all ON sampleblog.* to root@"10.0.0.11";
Query OK, 0 rows affected (0.00 sec)

仮想環境用のテスト実行なので、rootでかつパスワードなしで設定しているけど、ここは通常は権限をselect, update, createなど細かく設定し、パスワードもしっかり設定するのがよい。

そしてようやくmigrateが正常終了した。

[vagrant@dev-wb01 samplesystem]$ php artisan migrate
Migrated: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_100000_create_password_resets_table
Migrated: 2017_01_28_050812_create_articles_table

migrateを実行して、既存tableがすでにあるというようなエラーになった場合は、mysqlに接続してdrop tableで消して再度migrateを実行するとうまくいった。そのような対応で良いかはよく分からなくて微妙だけど。

サンプル見ながらmigrateするだけで1日オワタ\(^o^)/w
本当はController、Viewくらいまでは作りたかったのだけど。

まぁ、こんな感じで自分がまたハマるだろうエラーを綴っていこう。それにしてもはてな記法ソースコードのハイライトは便利だね。一応この記事はshとmysqlのタイプを指定している。

このブログの更新内容

一応このブログの更新内容を簡単に示しておこうと思う。

基本的に自分のプログラミング、コンピュータ系技術のアウトプット、備忘録となる。今仕事で使っていたり、自分の興味関心がある技術領域は以下となる。

いろいろ使い慣れていない技術を使っていると、よく分からないエラーコード、エラーメッセージが出てきて、心が折れそうになったりするし、ググってもぴったり解決した!!というページにヒットすることは案外なかったりする。特に使っている技術がマイナーだと。そいういう時に情報共有がもっとされていたらなと思ったりするので、若干面倒だけど自分の技術力向上とネットワーク越しの誰かの役に立つかもしれないことを期待して更新していこうと思う。

上に挙げた技術でも特にPHP、Laravel, MySQL(Maria DB)あたりが一番更新内容として多いかもしれない。可能であれば週1回は更新していきたいかなと。

ということで、ブログタイトル通り、主に設定エラー、コンパイルエラーなどはまったところの解決結果などを示していきたい。あと、余談だが、ブログタイトルは自分の人生そのものがバグりまくってて障害だらけだけどなんとか運用でカバーwみたいな状況で生きていることを示唆している側面もある。

Lv 33

今日が誕生日だった。
今日で33歳になった。なので、前から始めようと思っていたはてなブログを始めることにする。他にもLivedoorで2つブログをやっているので、これが3つ目のブログである。ゾロのごとく三刀流w

このブログの主なテーマは主にプログラミングやIT技術について。いろいろ自分の技術勉強のアウトプット、備忘録的に使っていく予定。何を更新していくか、更新頻度はどうなるかはわからないけど、とりあえずやってみることにした。

勝手な妄想的ないけてるITエンジニアの3種の神器はMacGitHubアカウント、はてなブログかと思っていたので。Macは会社貸与のものを使用して今更新しているし、GitHubは一応だいぶ前に作ってある(ただし、何もPushしていない)、そしてはてなブログと。

ということでスタートだ!!