Railsでf.selectにclassが設定できない時
環境
f.select
<%= form_for @user do |f| %>
...
<%= f.select :job, { engineer: "Engineer", ... }, class: "myclass" %>
...
<% end %>
ここでセレクトタグに.myclass
が設定されていることが期待されるが、
実際に生成されるHTMLは下記のようになる。
<select id="user_job" name="user[job]">
<option selected="selected" value="engineer">Engineer</option>
...
</select>
classが設定できない時の対処法
<%= form_for @user do |f| %>
...
<%= f.select :job, { engineer: "Engineer", ... }, {}, { class: "myclass" } %>
...
<% end %>
これでclassが設定されたHTMLが出力されるはずです。
<select class="myclass" id="user_job" name="user[job]">
<option selected="selected" value="engineer">Engineer</option>
...
</select>
参考
Railsでdefault_scopeの解除方法
環境
default_scopeの設定方法
order
やwhere
文などをdefault_scope
メソッドに渡してあげればおk
class User < ActiveRecord::Base ... default_scope { order(email: :asc) } default_scope { where(deleted_at: nil) } ... end
orderの解除方法
reorder
でorder
のみ解除できる。
User.all #=> "SELECT `users`.* FROM `users` WHERE `users`.`deleted_at` IS NULL ORDER BY `users`.`email` ASC" User.reorder(nil) #=> "SELECT `users`.* FROM `users` WHERE `users`.`deleted_at` IS NULL User.reorder(id: :desc) #=> "SELECT `users`.* FROM `users` WHERE `users`.`deleted_at` IS NULL ORDER BY `users`.`id` DESC"
特定のscopeの解除方法
except
またはunscope
で解除することが出来る。
unscope
の方はexcept
よりも細かい設定をすることが出来るようです。
User.all #=> "SELECT `users`.* FROM `users` WHERE `users`.`deleted_at` IS NULL ORDER BY `users`.`email` ASC" User.except(:order) User.unscope(:order) #=> "SELECT `users`.* FROM `users` WHERE `users`.`deleted_at` IS NULL User.except(:where) User.unscope(:where) User.unscope(where: :deleted_at) #=> "SELECT `users`.* FROM `users` ORDER BY `users`.`id` DESC"
感想
今回は環境がRails4だったのでRails3などでは結果が違うかもしれないですね。
参考
Macで作るLaravel 4.1 開発環境
環境
PHP 5.5 をインストール
$ curl -s http://php-osx.liip.ch/install.sh | bash -s 5.5
pathを追加する
$ vim ~/.bash_profile
export PATH=/usr/local/php5/bin:$PATH
設定ファイルを反映させる
$ source ~/.bash_profile
$ php -v
PHP 5.5.12 (cli) (built: May 17 2014 15:21:52)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2014, by Zend Technologies
with Xdebug v2.2.3, Copyright (c) 2002-2013, by Derick Rethans
php_mcryptのインストール
$ brew install mcrypt
composerのインストール
$ curl -sS https://getcomposer.org/installer | php -d detect_unicode=Off
$ mv composer.phar /usr/local/bin/composer
$ composer --version
Composer version 0c343f925ad578a9da4d9a4cfff4e91b500d206c 2014-05-14 09:25:20
Laravelのプロジェクトを作成
適当なディレクトリにプロジェクトを作成
$ composer create-project laravel/laravel myapp --prefer-dist
$ cd myapp
$ php artisan serve
http://localhost:8000にアクセスして下記画面が表示されていればおk
参考
UbuntuにMySQLをインストール
環境
mysqlをインストール
まずはインストールされるバージョンを確認
まだ5.6は登録されていないみたいですね。
$ sudo apt-get update
$ apt-cache show mysql-server | grep Version
Version: 5.5.37-0ubuntu0.12.04.1
Version: 5.5.22-0ubuntu1
aptでインストール
$ sudo apt-get install mysql-server
$ mysql --version
mysql Ver 14.14 Distrib 5.5.37, for debian-linux-gnu (x86_64) using readline 6.2
設定
設定ファイルはバックアップしておきましょう
$ cd /etc/mysql
$ cp my.cnf my.cnf.org
文字コードなどを設定
$ sudo vi my.cnf
下記を追記
[client]
default-character-set = utf8
[mysqld]
skip-character-set-client-handshake
character-set-server = utf8
collation-server = utf8_general_ci
init-connect = SET NAMES utf8
設定を反映させるためmysqlを再起動
$ sudo service mysql restart
mysqlにログイン
$ mysql -u root -p
ステータスをチェック
mysql> status
--------------
mysql Ver 14.14 Distrib 5.5.37, for debian-linux-gnu (x86_64) using readline 6.2
Connection id: 37
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.5.37-0ubuntu0.12.04.1 (Ubuntu)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /var/run/mysqld/mysqld.sock
Uptime: 19 min 17 sec
Threads: 1 Questions: 112 Slow queries: 0 Opens: 171 Flush tables: 1 Open tables: 41 Queries per second avg: 0.096
--------------
起動、停止、再起動
$ sudo service mysql start
$ sudo service mysql stop
$ sudo service mysql restart
プロセスの確認
$ ps aux | grep mysqld
mysql 1461 0.0 4.2 492564 42912 ? Ssl 06:40 0:00 /usr/sbin/mysqld
hoge 3372 0.0 0.0 14572 948 pts/0 S+ 06:51 0:00 grep --color=auto mysqld
MySQLをGUIで管理
$ sudo apt-get install mysql-workbench
参考
Nginx, Unicornで作るRailsアプリ
環境
Railsアプリ
Railsはインストール済みとする。
とりあえず適当にプロジェクトの作成
$ rails new blog
nginxのインストール
aptでnginxの公式リポジトリを使うように設定する。
$ sudo vi /etc/apt/sources.list.d/nginx.list
nginx.listに下記を追記
deb http://nginx.org/packages/ubuntu/ precise nginx
deb-src http://nginx.org/packages/ubuntu/ precise nginx
PGP公開鍵を追加する必要があるらしい
$ curl http://nginx.org/keys/nginx_signing.key | sudo apt-key add -
インストール可能なバージョンを確認
$ sudo apt-get update
$ apt-cache show nginx | grep Version
Version: 1.4.7-1~precise ## 最新のバージョンが確認できればおk
Version: 1.1.19-1ubuntu0.6
Version: 1.1.19-1ubuntu0.5
Version: 1.1.19-1
nginxのインストール
$ sudo apt-get install nginx
$ nginx -v
nginx version: nginx/1.4.7
nginxの設定
/etc/nginx/conf.d/default.conf
upstream backends {
server 127.0.0.1:3000;
}
server {
listen 80;
server_name localhost;
location / {
if (-f $request_filename) { break; }
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://backends;
}
}
Unicornのインストール
Gemfileにunicornを追加
gem 'unicorn'
bundleでサクッとインストール
$ bundle install
設定ファイルの作成
config/unicorn.rb
# config:utf-8
# unicorn.rb
# process count
worker_processes Integer(ENV["WEB_CONCURRENCY"] || 4)
# 15秒でWorkerをkillしてタイムアウト
timeout 15
# trueにしておくとダウンタイムが発生しないらしい
preload_app true
# 使用するポート番号を指定
listen 3000
# Capistranoを使うときに設定
pid "/path/to/rails/tmp/pids/unicorn.pid"
# ログの設定
stderr_path File.expand_path('log/unicorn.log', ENV['RAILS_ROOT'])
stdout_path File.expand_path('log/unicorn.log', ENV['RAILS_ROOT'])
before_fork do |server, worker|
old_pid = "#{server.config[:pid]}.oldbin"
if File.exists?(old_pid) && server.pid != old_pid
begin
Process.kill("QUIT", File.read(old_pid).to_i)
rescue Errno::ENOENT, Errno::ESRCH
end
end
defined?(ActiveRecord::Base) and
ActiveRecord::Base.connection.disconnect!
end
after_fork do |server, worker|
Signal.trap 'TERM' do
puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
end
defined?(ActiveRecord::Base) and
ActiveRecord::Base.establish_connection
end
def rails_root
require "pathname"
Pathname.new(__FILE__) + "../../"
end
taskの作成
lib/tasks/unicorn.rake
namespace :unicorn do
# Tasks
desc "Start unicorn"
task(:start) {
config = rails_root + "config/unicorn.rb"
env = ENV['RAILS_ENV'] || "development"
sh "bundle exec unicorn_rails -D -c #{config} -E #{env}"
}
desc "Stop unicorn"
task(:stop) { unicorn_signal :QUIT }
desc "Resta unicorn with USR2"
task(:restart) { unicorn_signal :USR2 }
desc "Increment number of worker processes"
task(:increment) { unicorn_signal :TTIN }
desc "Decrement number of worker processes"
task(:decrement) { unicorn_signal :TTOU }
desc "Unicorn pstree (depends on pstree command)"
task(:pstree) do
sh "pstree '#{unicorn_pid}'"
end
# Helpers
def unicorn_signal signal
Process.kill signal, unicorn_pid
end
def unicorn_pid
begin
File.read(rails_root + "tmp/pids/unicorn.pid").to_i
rescue Errno::ENOENT
raise "Unicorn doesn't seem to be running"
end
end
def rails_root
require "pathname"
Pathname.new(__FILE__) + "../../../"
end
end
unicorn起動
$ rake unicorn:start
動作確認
http://localhost/ にアクセスできればおk
その他
参考
間違えてユーザーの所属グループを上書きしてしまった時
環境
- Ubuntu 12.04
所属グループが消えとるんだが(;´Д`)
よしhogeユーザーをnewgrpグループに追加しようと思い、下記コマンドを実行した
$ usermod -G newgrp hoge
その後に、sudoを使ったら何故かpermission denyとか言って怒られる。
何故だろうと思い$ id -a
で所属グループを確認したらnewgrp以外消えとるんだが(;´Д`)
どうやら$ usermod -G ...
だとグループの追加ではなく上書きで変更するらしい。
そんな事知らずに今まで使ってたんだが…
そんな訳で、一旦recovery modeでログイン
最初に登録されていたグループ一覧は
$ cat /etc/group- | grep hoge
で確認できるはず。
$ mount -o rw,remount / ## これをしとかないと次のコマンドを実行できないよ
$ usermod -G adm,cdrom,...,plugdev hoge
これで、グループが元に戻せるはず。
ユーザーの所属グループを追加したいとき
$ gpasswd -a hoge newgrp
これでいけるらしい。
参考
初めてのRuby on Rails
目的
Railsをインストールして動作確認する
環境
環境の確認
$ ruby -v
ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-darwin13.0]
$ gem -v
2.2.2
Railsのインストール
Gemを使ってRailsをインストール
$ gem install rails
$ rbenv rehash ## rbenvを使っているので更新を反映
$ rails -v
Rails 4.0.4
Railsアプリケーション
Railsアプリを新規作成しサーバーを起動する。
ちゃんと起動できていれば http://localhost:3000/ にページが表示されるはず。
$ rails new blog
$ cd blog
$ rails server ## サーバー起動