VimでMarkdown を編集するための設定

Vim で Markdown を編集することが多いのでストレスなく書けるように色々設定を追加してみました。

# ~/.vimrc

if has("autocmd")
  augroup MyAutoCmd
    autocmd!

    " md等の拡張子をMarkdownと判断させるための設定
    autocmd BufNewFile,BufRead *.{md,mdwn,mkd,mkdn,mark*} set filetype=markdown
    " イタリックフォントを無効にする設定
    autocmd FileType markdown hi! def link markdownItalic Normal
  augroup END
endif

" ソースコードをハイライトするための設定
" 設定例:
" ```erb
" <%= @movie.title %>
" ```
" ```ruby
" class MyClass
" end
" ```
"
let g:markdown_fenced_languages = [
\  'coffee',
\  'css',
\  'erb=eruby',
\  'javascript',
\  'js=javascript',
\  'json=javascript',
\  'ruby',
\  'xml',
\  'zsh',
\  'scala',
\  'java',
\  'c',
\  'php'
\]

f:id:kzy52:20150110001437p:plain

こんな感じで書いていくことができます。ビューアなくてもこれで十分。

参考

Big Sky :: Vim で markdown 内に書かれているプログラミング言語をハイライト

Error: File /var/cache/yum/x86_64/6/epel/metalink.xml is not XML

$ sudo yum update
Loaded plugins: fastestmirror, security
Setting up Update Process
Loading mirror speeds from cached hostfile
Error: File /var/cache/yum/x86_64/6/epel/metalink.xml is not XML

「Error: File /var/cache/yum/x86_64/6/epel/metalink.xml is not XML」というエラーが出る場合以下を実行する。

$ sudo yum clean all

Nginx + PHP-FPM で WordPress を動かす

Nginx + PHP-FPM で WordPress を動かしてみました。

環境

CentOS 6.6

Remiリポジトリの追加

以下のページ通りにRemiリポジトリとEPELリポジトリを追加しておきます。 (Remiリポジトリを利用するにはEPELリポジトリが必要)

【Linux】EPEL, Remi, RPMforgeリポジトリを追加する方法 - kzy52's blog

PHP のインストール

$ sudo yum -y --enablerepo=remi install php php-mbstring php-mysql

設定ファイル

# /etc/php.ini

; デフォルトの文字コード
default_charset = "UTF-8"

; タイムゾーンの設定
date.timezone = "Asia/Tokyo"

[mbstring]
; デフォルト言語の設定
mbstring.language = Japanese

; 内部文字エンコーディングの設定
; PHP 5.6.0以降では非推奨になっているので設定しないようにしてください。代わりにdefault_charsetを設定します。
;mbstring.internal_encoding = EUC-JP

; HTTP入力文字エンコーディングの設定
; PHP 5.6.0以降では非推奨になっているので設定しないようにしてください。代わりにdefault_charsetを設定します。
;mbstring.http_input = auto

; HTTP出力文字エンコーディングの設定
; PHP 5.6.0以降では非推奨になっているので設定しないようにしてください。代わりにdefault_charsetを設定します。
;mbstring.http_output = SJIS

MySQL のインストール

$ sudo yum -y --enablerepo=remi install mysql-server

設定ファイル

# /etc/my.cnf

[mysqld]
character-set-server = utf8
skip-character-set-client-handshake

[mysql]
default-character-set = utf8

MySQL の起動、自動起動設定

$ sudo service mysqld start
$ sudo chkconfig mysqld on

セキュリティ強化

$ sudo mysql_secure_installation

Enter current password for root (enter for none): Enter
Set root password?(rootパスワード設定する?) [Y/n] Y
Remove anonymous users?(匿名ユーザー削除する?) [Y/n] Y
Disallow root login remotely?(リモートからのrootログインを拒否する?) [Y/n] Y
Remove test database and access to it?(テストDB削除する?) [Y/n] Y
Reload privilege tables now?(設定した内容を反映するか?) [Y/n] Y

データベース作成

データベースを「wordpress」ユーザー名を「wpadmin」パスワードを「password」で作成します。

$ mysql -u root -p
> CREATE DATABASE `wordpress` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;
> CREATE USER `wpadmin`@`localhost` IDENTIFIED BY 'password';
> GRANT ALL ON `wordpress`.* TO `wpadmin`@`localhost`;

Nginx のインストール

$ sudo yum -y install nginx

設定ファイル

# /etc/nginx/conf.d/wordpress.conf

server {
  listen 80;
  server_name example.com; # 取得したドメインを指定してください
  root /var/www/wordpress;
  index index.php;

  location / {
    if (!-e $request_filename) {
      rewrite ^/(.+)#  /index.php?q=$1 last;
      break;
    }
  }
  
  # wp-config.phpへのアクセスをすべて拒否します。
  location ~* /wp-config.php {
    deny all;
  }

  location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_param SCRIPT_FILENAME /var/www/wordpress$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_script_name;
    include fastcgi_params;
  }
}

設定のチェック

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Nginx の起動、自動起動設定

$ sudo service nginx start
$ sudo chkconfig nginx on

PHP-fpm のインストール

$ sudo yum -y --enablerepo=remi install php-fpm

設定ファイル

# /etc/php-fpm.d/www.conf

user = nginx
group = nginx

PHP-fpm の起動、自動起動設定

$ sudo service php-fpm start
$ sudo chkconfig php-fpm on

WordPress のインストール

https://ja.wordpress.org/ から最新版をダウンロードします。

$ sudo mkdir /var/www
$ cd /var/www
$ sudo wget https://ja.wordpress.org/latest-ja.tar.gz
$ sudo tar zxfv latest-ja.tar.gz
$ sudo rm -rf  latest-ja.tar.gz
$ sudo chown -R nginx:nginx wordpress

設定ファイル

$ cd /var/www/wordpress
$ sudo cp wp-config-sample.php wp-config.php
# wp-config.php

// データベース情報を設定します。
define('DB_NAME', 'wordpress');
define('DB_USER', 'wpadmin');
define('DB_PASSWORD', 'password');
define('DB_HOST', 'localhost');
define('DB_CHARSET', 'utf8');

// 「put your unique phrase here」を 適当な文字列に置き換えます。
define('AUTH_KEY',         'put your unique phrase here');
define('SECURE_AUTH_KEY',  'put your unique phrase here');
define('LOGGED_IN_KEY',    'put your unique phrase here');
define('NONCE_KEY',        'put your unique phrase here');
define('AUTH_SALT',        'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT',   'put your unique phrase here');
define('NONCE_SALT',       'put your unique phrase here');

// プレフィックスは変更しておいた方がいいです。
$table_prefix  = 'wp_';

動作確認

http://[wordpress.confで設定したドメイン] をブラウザで開きます。

f:id:kzy52:20141129110600p:plain

Basic 認証の設定

管理画面にBasic 認証を設定します。

鍵の生成

ユーザー名を「wordpress」 パスワードを「password」にします。

$ sudo htpasswd -cb /var/www/wordpress/.htpasswd wordpress password
# /etc/nginx/conf.d/wordpress.conf

server {
  ...

  # これを追加します。
  location ~* /wp-login\.php|/wp-admin/((?!admin-ajax\.php).)*$ {
    auth_basic "Please enter your name and password";
    auth_basic_user_file  "/var/www/wordpress/.htpasswd";
  }

  location ~ \.php$ {
  ...
}

設定を反映

$ sudo nginx -t
$ sudo service nginx reload

参考

PHP: Runtime Configuration - Manual

Apache で WordPress を動かす

Apache で WordPress を動かしてみました。

環境

CentOS 6.6

Remiリポジトリの追加

以下のページ通りにRemiリポジトリとEPELリポジトリを追加しておきます。 (Remiリポジトリを利用するにはEPELリポジトリが必要)

【Linux】EPEL, Remi, RPMforgeリポジトリを追加する方法 - kzy52's blog

PHP のインストール

$ sudo yum -y --enablerepo=remi install php php-mbstring php-mysql

設定ファイル

# /etc/php.ini

; デフォルトの文字コード
default_charset = "UTF-8"

; タイムゾーンの設定
date.timezone = "Asia/Tokyo"

[mbstring]
; デフォルト言語の設定
mbstring.language = Japanese

; 内部文字エンコーディングの設定
; PHP 5.6.0以降では非推奨になっているので設定しないようにしてください。代わりにdefault_charsetを設定します。
;mbstring.internal_encoding = EUC-JP

; HTTP入力文字エンコーディングの設定
; PHP 5.6.0以降では非推奨になっているので設定しないようにしてください。代わりにdefault_charsetを設定します。
;mbstring.http_input = auto

; HTTP出力文字エンコーディングの設定
; PHP 5.6.0以降では非推奨になっているので設定しないようにしてください。代わりにdefault_charsetを設定します。
;mbstring.http_output = SJIS

MySQL のインストール

$ sudo yum -y --enablerepo=remi install mysql-server

設定ファイル

# /etc/my.cnf

[mysqld]
character-set-server = utf8
skip-character-set-client-handshake

[mysql]
default-character-set = utf8

MySQL の起動、自動起動設定

$ sudo service mysqld start
$ sudo chkconfig mysqld on

セキュリティ強化

$ sudo mysql_secure_installation

Enter current password for root (enter for none): Enter
Set root password?(rootパスワード設定する?) [Y/n] Y
Remove anonymous users?(匿名ユーザー削除する?) [Y/n] Y
Disallow root login remotely?(リモートからのrootログインを拒否する?) [Y/n] Y
Remove test database and access to it?(テストDB削除する?) [Y/n] Y
Reload privilege tables now?(設定した内容を反映するか?) [Y/n] Y

データベース作成

データベースを「wordpress」ユーザー名を「wpadmin」パスワードを「password」で作成します。

$ mysql -u root -p
> CREATE DATABASE `wordpress` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;
> CREATE USER `wpadmin`@`localhost` IDENTIFIED BY 'password';
> GRANT ALL ON `wordpress`.* TO `wpadmin`@`localhost`;

Apache のインストール

$ sudo yum -y install httpd

設定ファイル

# /etc/httpd/conf/httpd.conf

# ユーザーとグループの設定です
User apache
Group apache

# Web サーバーにアクセスしたクライアントに返す情報です。
# レスポンスヘッダには「Server: Apache」という名前しか返されません。
ServerTokens Prod

# エラーメッセージ出力時にフッタを表示しないようにします。
ServerSignature Off
# /etc/httpd/conf.d/wordpress.conf

<VirtualHost *:80>
  ServerName example.com; # 取得したドメインを指定してください
  DocumentRoot /var/www/wordpress
  <Directory "/var/www/wordpress">
    AllowOverride All # .htaccess による設定変更を許可
    Options -Indexes
  </Directory>

  # wp-config.phpへのアクセスをすべて拒否します。
  <Files wp-config.php>
    order allow,deny
    deny from all
  </Files>
</VirtualHost>

設定のチェック

$ sudo apachectl configtest
Syntax OK

Apache の起動、自動起動設定

$ sudo service httpd start
$ sudo chkconfig httpd on

WordPress のインストール

https://ja.wordpress.org/ から最新版をダウンロードします。

$ cd /var/www
$ wget https://ja.wordpress.org/latest-ja.tar.gz
$ sudo tar zxfv latest-ja.tar.gz
$ sudo rm -rf  latest-ja.tar.gz
$ sudo chown -R apache:apache wordpress

設定ファイル

$ cd /var/www/wordpress
$ sudo cp wp-config-sample.php wp-config.php
# wp-config.php

// データベース情報を設定します。
define('DB_NAME', 'wordpress');
define('DB_USER', 'wpadmin');
define('DB_PASSWORD', 'password');
define('DB_HOST', 'localhost');
define('DB_CHARSET', 'utf8');

// 「put your unique phrase here」を 適当な文字列に置き換えます。
define('AUTH_KEY',         'put your unique phrase here');
define('SECURE_AUTH_KEY',  'put your unique phrase here');
define('LOGGED_IN_KEY',    'put your unique phrase here');
define('NONCE_KEY',        'put your unique phrase here');
define('AUTH_SALT',        'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT',   'put your unique phrase here');
define('NONCE_SALT',       'put your unique phrase here');

// プレフィックスは変更しておいた方がいいです。
$table_prefix  = 'wp_';

動作確認

http://[wordpress.confで設定したドメイン] をブラウザで開きます。

f:id:kzy52:20141129110600p:plain

Basic 認証の設定

管理画面にBasic 認証を設定します。

鍵の生成

ユーザー名を「wordpress」 パスワードを「password」にします。

$ sudo htpasswd -cb /var/www/wordpress/.htpasswd wordpress password
# /var/www/wordpress/.htaccess

<Files "wp-login.php">
  AuthType Basic
  AuthName "Please enter your name and password"
  AuthUserFile /var/www/wordpress/.htpasswd
  Require valid-user
</Files>

設定を反映

$ sudo apachectl configtest
$ sudo service httpd graceful

参考

PHP: Runtime Configuration - Manual

ActiveRecord の結果からフィクスチャを生成する

ActiveRecord の結果からフィクスチャを生成する方法です。

$ rails c
> table_name = User.table_name
> records = User.all
>
> File.open("#{table_name}.yml", 'w') do |file|
>   records.map(&:attributes).each.with_index(1) do |record, i|
>     file.write({ "#{User.table_name}#{i}" => record }.to_yaml.sub(/\A-+\n/, ''))
>   end
> end

Rails のフォームビルダーをカスタマイズする

Ruby on Rails Guides にフォームビルダーをカスタマイズする方法が載っていたので試してみた。

# lib/labelling_form_builder.rb

class LabellingFormBuilder < ActionView::Helpers::FormBuilder
  def text_field(attribute, options={})
    label(attribute) + super
  end
end
# config/application.rb

module Demo
  class Application < Rails::Application
    ...
    config.autoload_paths += %W(#{config.root}/lib)
  end
end
# app/views/users/_form.html.erb

<%= form_for @user, builder: LabellingFormBuilder do |f| %>
  <div class="field">
    <%= f.text_field :email %>
  </div>
  <div class="field">
    <%= f.text_field :name %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

text_field しか呼び出していませんが、ちゃんとラベルも出力されています。

<div class="field">
  <label for="user_email">Email</label>
  <input id="user_email" name="user[email]" type="text">
</div>

<div class="field">
  <label for="user_name">Name</label>
  <input id="user_name" name="user[name]" type="text">
</div>

参考

Form Helpers — Ruby on Rails Guides