はじめに
gemを実装しなくとも論理削除は実装可能ですが、railsライクで論理削除gemのparanoiaを導入して、レコードの論理削除を実装します。
動作としては削除日時(deleted_at)カラムを用意して削除するときに、deleted_atに日時を入れてくれるというものです。この状態でレコードを表示すると、削除されたレコードは抽出対象にならずに表示してくれます。
paranoiaの導入
詳細については以下のリポジトリreadmeを参照ください
gemリポジトリ:
https://github.com/radar/paranoia
paranoiaインストール
Gemfileにparanoiaの定義を記述
gem "paranoia"
反映
bundle install
論理削除用のカラムをテーブルへ追加
論理削除にparanoiaが使用するカラムを用意します。paranoiaではこのカラムを使用してSQLを発行するのでindexを一緒に速度を考慮してつけておきます。
例)Usersテーブルへ論理削除用のdeleted_atカラムを追加します※index込み
rails generate migration AddDeletedAtToUsers deleted_at:datetime:index
マイグレーションファイルの中身は以下のとおりです
class AddDeletedAtToUsers < ActiveRecord::Migration
def change
add_column :users, :deleted_at, :datetime
add_index :users, :deleted_at
end
end
テーブルへ反映します
rake db:migrate
対象テーブルのModelへparanoia機構を反映
対象のテーブルのModelへparanoia設定をします
例)UsersテーブルのModelへ設定します
class Users < ActiveRecord::Base
acts_as_paranoid
end
このときもしもparanoiaのデフォルトのdeleted_atでなく、別の名前のカラム名にした場合は以下のようになります
class Users < ActiveRecord::Base
acts_as_paranoid column: :任意のカラム名
end
paranoiaの使い方
paranoiaを導入したところで、実際にデータを論理削除を行い、テーブルの参照を行って表示されないことを確認してみます。
メソッドの詳細系はreadmeを参照ください
gemリポジトリ:
https://github.com/radar/paranoia
テーブルからレコードの論理削除
テーブルのレコードを削除します
例)UsersテーブルのID「1」のレコードを削除します
user = Users.find(1) user.destroy
ここで発行されているSQLは以下の通りです
update users set updated_at = ’2015-07-23 00:00:00′, deleted_at = ’2015-07-23 00:00:00′ where id = 1
テーブルのレコード一覧を確認
正しく削除されているか確認します
Users.all
※ID「1」が表示されていなければOKです
ここで発行されているSQLは以下の通りです
select * from users where deleted_at is null
テーブルから削除したレコードインスタンスの確認
削除したインスタンスの状態を確認します
user.deleted_at
※削除した日時が表示されていればOKです
テーブルの削除レコードを含むレコードの一覧を確認
削除したレコードも含み全体を確認します
Users.with_deleted
※ID「1」とその他レコードが表示されていればOKです
ここで発行されているSQLは以下の通りです
select * from users
テーブルの削除したレコードの一覧を確認
削除したレコードを確認します
Users.only_deleted
※ID「1」が表示されていればOKです
ここで発行されているSQLは以下の通りです
select * from users where deleted_at is not null
テーブルからレコードの物理削除
paranoiaを導入したことにより、論理削除を強制としますが、それでも物理削除をしたい場合もあります。
その場合はdestoyメソッドに!をつけてdestory!を実行すると物理削除になります。
はじめに
railsでは標準のirbよりも高度なpryがコンソールツールとしてよく使われています。
そしてデバッグ時にpryまたはirbでモデル表示「[モデル名].allなど」をおこなうと表示があまり見やすくありません。
もう少し見やすくということでHirbでは表形式で表示してくれます。
pry + Hirb の導入
Gemfileの追記
プロジェクト直下にあるGemfileへpryとHirbのgemを記述します
pryはpry-railsのみで良いのですが、よく使われるその他pry関連gemも入れておきます。詳細はドキュメントを参照ください。
group :development, :test do gem 'hirb' # hirb gem 'hirb-unicode' # hirbの日本語対応用 gem 'pry-rails' # pryコンソール gem 'pry-doc' # メソッドを表示 gem 'pry-byebug' # デバッグを実施(Ruby 2.0以降で動作) gem 'pry-stack_explorer' # スタックをたどる end
※どちらもデバッグツールのためdevelopment,testとしておきます
インストール実行
$ bundle install
.pryrcファイルの追加
.pryrcファイルをプロジェクト直下に以下の内容で作成してください。
begin require 'hirb' rescue LoadError # Missing goodies, bummer end if defined? Hirb # Slightly dirty hack to fully support in-session Hirb.disable/enable toggling Hirb::View.instance_eval do def enable_output_method @output_method = true @old_print = Pry.config.print Pry.config.print = proc do |*args| Hirb::View.view_or_page_output(args[1]) || @old_print.call(*args) end end def disable_output_method Pry.config.print = @old_print @output_method = nil end end Hirb.enable end
内容はバージョンにより更新される場合があるので最新版は以下のサイトより確認ください。
https://github.com/pry/pry/wiki/FAQ#hirb
動作チェック
pryコンソールモードに入ります
$ rails c
pryコンソールモードでモデルの情報を表示します
pry(main)> User.all
※Userモデルの値を表示
実行結果として表形式で表示されるようになっていればOKです。
はじめに
bundle installでgemのnokogiriがinstallできていませんとエラーがでました。
直接nokogiriをinstall指定していませんでした。※これはインストールするgem内でnokogiriを使っているgemがあったのかと思います。
その後、nokogiriをyumでインストールしましたがエラーが出たため、対応策をメモしておきます。
エラーの改善について
詳細エラー内容
インストール実行
$ sudo yum install nokogiri
エラー内容
Building native extensions. This could take a while…
ERROR: Error installing nokogiri:
ERROR: Failed to build gem native extension./home/vagrant/.rbenv/versions/2.2.1/bin/ruby -r ./siteconf20150506-10401-826g5c.rb extconf.rb
checking if the C compiler accepts … yes
Building nokogiri using packaged libraries.
checking for gzdopen() in -lz… yes
checking for iconv… yes
************************************************************************
IMPORTANT NOTICE:Building Nokogiri with a packaged version of libxml2-2.9.2
with the following patches applied:
– 0001-Revert-Missing-initialization-for-the-catalog-module.patch
– 0002-Fix-missing-entities-after-CVE-2014-3660-fix.patchTeam Nokogiri will keep on doing their best to provide security
updates in a timely manner, but if this is a concern for you and want
to use the system library instead; abort this installation process and
reinstall nokogiri as follows:gem install nokogiri — –use-system-libraries
[--with-xml2-config=/path/to/xml2-config]
[--with-xslt-config=/path/to/xslt-config]If you are using Bundler, tell it to use the option:
bundle config build.nokogiri –use-system-libraries
bundle installNote, however, that nokogiri is not fully compatible with arbitrary
versions of libxml2 provided by OS/package vendors.
************************************************************************
Extracting libxml2-2.9.2.tar.gz into tmp/x86_64-unknown-linux-gnu/ports/libxml2/2.9.2… OK
Running patch with /home/vagrant/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/nokogiri-1.6.6.2/ports/patches/libxml2/0001-Revert-Missing-initialization-for-the-catalog-module.patch…
Running ‘patch’ for libxml2 2.9.2… ERROR, review ‘/home/vagrant/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/nokogiri-1.6.6.2/ext/nokogiri/tmp/x86_64-unknown-linux-gnu/ports/libxml2/2.9.2/patch.log’ to see what happened.
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers. Check the mkmf.log file for more details. You may
need configuration options.Provided configuration options:
–with-opt-dir
–without-opt-dir
–with-opt-include
–without-opt-include=${opt-dir}/include
–with-opt-lib
–without-opt-lib=${opt-dir}/lib
–with-make-prog
–without-make-prog
–srcdir=.
–curdir
–ruby=/home/vagrant/.rbenv/versions/2.2.1/bin/$(RUBY_BASE_NAME)
–help
–clean
–use-system-libraries
–enable-static
–disable-static
–with-zlib-dir
–without-zlib-dir
–with-zlib-include
–without-zlib-include=${zlib-dir}/include
–with-zlib-lib
–without-zlib-lib=${zlib-dir}/lib
–enable-cross-build
–disable-cross-build
/home/vagrant/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/mini_portile-0.6.2/lib/mini_portile.rb:279:in `block in execute’: Failed to complete patch task (RuntimeError)
from /home/vagrant/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/mini_portile-0.6.2/lib/mini_portile.rb:271:in `chdir’
from /home/vagrant/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/mini_portile-0.6.2/lib/mini_portile.rb:271:in `execute’
from extconf.rb:311:in `block in patch’
from extconf.rb:308:in `each’
from extconf.rb:308:in `patch’
from /home/vagrant/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/mini_portile-0.6.2/lib/mini_portile.rb:108:in `cook’
from extconf.rb:278:in `block in process_recipe’
from extconf.rb:177:in `tap’
from extconf.rb:177:in `process_recipe’
from extconf.rb:475:in `‘ extconf failed, exit code 1
Gem files will remain installed in /home/vagrant/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/nokogiri-1.6.6.2 for inspection.
Results logged to /home/vagrant/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/extensions/x86_64-linux/2.2.0-static/nokogiri-1.6.6.2/gem_make.out
対応策
エラー内に改善案が書いてありました。
必要なライブラリをインストールし再度nokogiriを指定方法によりインストールします。これで手元環境ではエラーなく成功しました。
$ sudo yum -y install libxml2 libxslt libxml2-devel libxslt-devel $ gem install nokogiri -- --use-system-libraries
rbenvで2.0.0系のrubyインストール時のエラーの改善方法メモ
rubyのバージョンを2系にしないとrails 4系は動作しないらしい。
改善としてはrubyのバージョンを2系にするかrailsをダウングレードするかのみ。
今回はxcodeのバージョンをアップしていない(OSアップデートしていない)ため
railsのダウングレードをする
Warning: You're using Rubygems 1.8.23 with Spring. Upgrade to at least Rubygems 2.1.0 and run `gem pristine --all` for better startup performance. * bin/rake: spring inserted * bin/rails: spring inserted
Railsダウングレード
一度対象のRailsをアンインストールし再度バージョンを指定してRailsのインストールで完了
Railsアンインストール
gem uninstall railties -v '4.1.1'
※アンインストールバージョンが4.1.1の場合
Railsバージョン指定インストール
sudo gem install rails -v '3.2.10'
※インストールバージョンが3.2.10の場合
MacにRails環境を構築する方法をメモ
パッケージ管理ソフトはhomebrew、一からMacにRails環境を構築する方法と概要について。
Command Line Toolsインストール
Macで開発を行うためのコマンドラインツールをインストールする。
参考抜粋
——————————————————————————————————-
デベロッパ ポータルから直接、Xcode コマンド ライン ツールを .dmg ファイルとしてダウンロードすることができます。
Mac で https://developer.apple.com/downloads/index.action にアクセスします。
インストールの途中で Apple Developer としてログインするよう求められます。
[Downloads for Apple Developers]リストで、必要な[Command Line Tools]の項目を選択します。
——————————————————————————————————-
参考:
http://www.hulinks.co.jp/support/fortran/f_macosx018.html
Homebrewインストール
パッケージ管理ソフトのHomebrewをインストールする。Macにパッケージ類をインストールするためのソフト。
インストール
ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go/install)"
インストール確認(バージョンチェック)
brew -v
homebrewのバージョンが表示されれば成功
rbendインストール
Rubyのバージョン管理に使用するrbenvをインストールする。rubyのバージョンアップの切り替えをサポートするツール。
rbend,ruby-buildインストール
brew install rbenv ruby-build
rbendのパスを設定
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile echo 'export PATH="$HOME/.rbenv/shims:$PATH"' >> ~/.bash_profile source ~/.bash_profile
Rubyインストール
rbenvを使いrubyのインストール可能バージョンを確認
rbenv install -l
インストールしたいrubyを選びインストール
rbenv install (バージョン名)
例) 2.0.0-p353のrubyをインストールする場合
rbenv install 2.0.0-p353
※The Ruby openssl extension was not compiled. Missing the OpenSSL lib?エラーとなる場合
参考http://to-developer.com/blog/?p=1197
インストール確認
rbenv versions
関連ディレクトリの更新 ※しないといけない
rbenv rehash
参考
http://dqn.sakusakutto.jp/2014/02/rbenv_rehash_what_it_does.html
使用するrubyバージョンを設定
rbenv global 2.0.0-p353
rubyのバージョン確認
ruby -v
ここで2.0.0になっていれば成功
Railsインストール
ruby標準のダウンロードツール(コマンド)gemを使いインストールする。
RDoc(Documentation from Ruby Source Files)をインストール
gem install rdoc
※これをいれずにRailsをインストールすると、「file ‘lib’ not found」がでる
sudo gem install rails
Rails開発で入れておいた方が良いライブラリ群のインストール
Rails開発で使いそうなライブラリもgemでインストールする。
gem install bundler gem install mysql gem install sqlite3 gem install jquery-rails gem install rake gem install activerecord-postgresql-adapter gem install uglifier gem install json
Railsプロジェクト作成
新規Railsプロジェクトのディレクトリ作成
rails new [プロジェクト名]
Vagrant+Chefレシピでphp環境の方法をメモ
仮想マシンを構築するvagrantで仮想環境はvirtualboxのcentosとする
centosのBoxを使ってphp + mysql + apache を構築する
1. virtualbox,vagrantをインストールする
公式サイトから各環境に合わせてダウンロードしインストールを実行
Virtualboxインストール
https://www.virtualbox.org/
Vagrantインストール
http://www.vagrantup.com/
2. vagrantのcentosBoxをインストールする
今回は「Vagrant-Box一覧サイト」内のCentOSのBOXを使用する
Vagrant-Boxesインストール
http://www.vagrantbox.es/
http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-i386-v20130427.box
3. chefをインストールする
chefは構築環境の設定内容をコードで記述するもの
Chefインストール
http://www.opscode.com/chef/
マック環境:
curl -L https://www.opscode.com/chef/install.sh | sudo bash
インストール確認
gem list
4. knife-soloプラグインをインストールする
cookbook(開発環境を記したもの)の命令をリクエストするためのものがknifeになる
sudo gem install knife-solo
インストール確認
gem list
5. knife-soloの初期設定をする
knife configure
全てデフォルト設定としてエンターを続けて押し終了する
6. 仮想マシンに使用するvagrantを構築する
・仮想マシンに使用するディレクトリを作成する
mkdir [仮想マシンディレクトリ名] cd [仮想マシンディレクトリ名] vagrant init [boxの名前]
・vagrantファイルの編集
プライベートネットワークを設定しローカル環境からアクセスできるようにする
IPアドレスは初期状態で「192.168.33.10」になっているが変更しても良い
この設定でローカルから仮想環境にipアドレスでアクセスが可能になる
- #config.vm.network :private_network, ip: "192.168.33.10" + config.vm.network :private_network, ip: "192.168.33.10"
7. 仮想マシンを立ち上げる
vagrant up
8. 仮想マシンの状態確認
vagrant status
「default running (virtualbox)」
が表示されればOK
9. sshのエイリアス作成
vagrant ssh-config --host [sshエイリアス名] >> ~/.ssh/config
仮想マシンアクセス方法
vagrant ssh
又は指定したエイリアス名
ssh [エイリアス名]
10. chefのリポジトリを作成する(ローカル側)
knife solo init [リポジトリ名]
リポジトリの中にディレクトリが構成される
※ここではsite-cookbook,nodesディレクトリのみ使用する
11. 仮想マシンをchef対応にする
cd [リポジトリ名] knife solo prepare [sshエイリアス名]
12. cookbookを作成する
cookbookに構築する環境の設定コードを記述することで仮想環境が指定した環境になる
knife cookbook create [cookbookの名前] -o site_cookbooks/
13. cookbookに構築する環境の設定コードを記述する
[リポジトリ名]\[cookbookの名前]\recipes\default.rbファイル編集
# # Cookbook Name:: php # Recipe:: default # # Copyright 2013, YOUR_COMPANY_NAME # # All rights reserved - Do Not Redistribute # service "iptables" do action [:stop, :disable] end %w{php php-common php-mbstring php-xml php-devel php-process php-cli php-pear php-mysql mysql-server}.each do |p| package p do action :install end end # apacheのインストール CentOSの場合 package "httpd" do action :install end # apacheの起動 CentOSの場合 service "httpd" do action [:start, :enable] end template "/var/www/html/index.html" do source "index.html.erb" mode 0644 end
完成例 ※ 「PHP + MYSQL + APACHE」環境
https://github.com/y-matsumoto/php-mysql-apache-vagrant-environment
14. 実行するrecipe(cookbook)を指定する
[リポジトリ名]\nodes\[sshエイリアス名].jsonファイル編集
{ "run_list":[ "recipe[[cookbookの名前]]" ] }
15. 完成したcookbookをvagrant仮想環境へ反映させる
knife solo cook [sshエイリアス名]
16. Webサーバ(apatch)テスト
ブラウザでhttp://192.168.33.10/ へアクセス
[リポジトリ名]\[cookbookの名前]\template\default\index.html.erbが表示される ※完成例
chef test html test desu
coffee-break
Don't write code that useless.
1日5杯はコーヒー、カフェオレ飲みます。狭心症のため安静にします☆松本 雄貴
Kotlinでサービスリリース目指す!
iOSでチャットアプリ作成中。自然言語解析LSIを習得中
Mac / Android・iOS / Rails / Oracle
2017年 Lpic L2取得
2012年 Android技術者資格取得
2010年 OracleMasterGold10g取得
2008年 CCNAQiitaもたまに投稿
https://qiita.com/y-matsumoto東京近郊で常駐開発探してる方はこちらよりご連絡ください
SES企業でパートナー会社を探している企業様はこちらよりご連絡ください
スプリットカメラ iOS / Android
音声認識で聞いた日付から曜日当てアプリ Android
ソーシャルタイマー Android
カテゴリー
- ActiveRecord (2)
- Android (52)
- AndroidStudio (10)
- Ansible (1)
- AWS (1)
- Bash (18)
- Blog (7)
- BootStrap (1)
- CentOS (16)
- Chef (1)
- css (2)
- Eclipse (5)
- error (1)
- Facebook (2)
- Firebase (1)
- FuelPHP (16)
- Git (22)
- GitHub (3)
- Gradle (2)
- GraphAPI (1)
- Grunt (1)
- heroku (2)
- illustrator (1)
- iOS (17)
- Java (4)
- Jenkins (1)
- jQuery (3)
- Kotlin (2)
- Mac (22)
- nginx (1)
- Node.js (3)
- peco (1)
- php (5)
- Python (1)
- Rails (16)
- Ruby (11)
- shell (1)
- SNS (1)
- Swift (2)
- tmux (2)
- Vagrant (6)
- Vim (6)
- windows (2)
- WordPress (3)
- zsh (4)
- フリーランス (1)
- ライブラリ (1)
- 勉強会 (2)
- 宣伝 (1)
- 未分類 (2)
最近の投稿
- [MAC]HighSierraでgitプッシュエラー「Unable to negotiate with xxx.xxx.xxx.xxx port xx: no matching cipher found. Their offer: aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se fatal: Could not read from remote repository.」
- [iOS]iOS11からFacebook,Twitter連携(シェアなど)廃止の対応方法
- [iOS]速報2017AppleSpecialEventのiOS11、iPhone8など発表内容について
- [iOS][Firebase]The default Firebase app has not yet been configured. Add `[FIRApp configure];
- [iOS]2017年9月リリースのiOS11で開発者が対応するべきこと
- 今人気の現金化サービスCASH(キャッシュ)を使ったレビュー
- [Pandoc][Mac]pandocでmarkdownからwordファイル作成
- [Android]映画サマーウォーズの聞いた日付(誕生日)から曜日当てをアプリ音声認識で簡単に実現
- [Android]起動しているActivityを取得するadb shell コマンド
- [Android][Kotlin]kotlin学習で参考になるサイト一覧
2023年5月 月 火 水 木 金 土 日 « 5月 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 アーカイブ
- 2018年5月
- 2017年9月
- 2017年8月
- 2017年7月
- 2017年6月
- 2017年5月
- 2017年2月
- 2017年1月
- 2016年12月
- 2016年7月
- 2016年6月
- 2016年1月
- 2015年12月
- 2015年11月
- 2015年10月
- 2015年9月
- 2015年8月
- 2015年7月
- 2015年6月
- 2015年5月
- 2015年4月
- 2015年3月
- 2015年2月
- 2015年1月
- 2014年12月
- 2014年11月
- 2014年6月
- 2014年5月
- 2014年4月
- 2014年3月
- 2014年2月
- 2014年1月
- 2013年12月
- 2013年11月
- 2013年9月
- 2013年8月
- 2013年7月
- 2013年6月
- 2013年5月
- 2013年4月
- 2013年3月
- 2013年2月
- 2013年1月
- 2012年12月
- 2012年10月
- 2012年5月
- 2010年6月
エントリ