Tạo project PHALCON chơi cho vui ;)

Hi, mình không viết cụ thể từng bước, chỉ viết tóm lược các bước cần phải làm từ khi tạo server cho tới khi lấy code phalcon về thôi nhé.

Go!!!!

  • Tạo server (Centos7, LAMP)
  • Sau khi cài php thì cài tiếp các gói cần thiết bằng lệnh:

$ sudo yum install php-fpm php-mysql php-gd php-mbstring php-pear php-xml php-xmlrpc php-devel php-phalcon php-mcrypt php redis php-xdebug

  • Tiếp theo là bước cài đặt phalcon:

httpd -v ; php -v ; sestatus ; cat /etc/redhat-release

sudo yum groupinstall ‘Development Tools’

(or: sudo yum -y groupinstall base “Development tools” –setopt=group_package_types=mandatory,default,optional)

sudo yum -y install php56w-devel gcc libtool gcc-c++ pcre-devel zlib-devel make unzip re2c

$ git clone https://github.com/phalcon/cphalcon.git

$ cd cphalcon/build

$ ./install

Check info.php để biết tình trạng phalcon đã cài đặt thành công chưa nhé.

  • sau khi đã cài xong phalcon thì cài tiếp phalcon tools theo hướng dẫn:
  • Quay lại thư mục var/www/html dùng lệnh sau để tạo phalcon apptest:

sudo phalcon project apptest

Cần chỉnh lại AllowOverride None -> AllowOverride All

trong: /etc/httpd/conf/httpd.conf

Cuối cùng thì chạy thử bằng localhost!!

Advertisements

Chia sẻ vagrant box image lên cloud cho mọi người

Bước 1: Tạo tài khoản nơi bạn muốn chia sẻ: https://app.vagrantup.com/

Bước 2: Login vào https://app.vagrantup.com/ và tiến hành “New Vagrant Box”

Bước 3: Điền thông tin cho vagrant box bạn đang tạo

Bước 4: Edit Provider:

+ Thông thường sẽ chọn provider là: virtualbox

+ Tiến hành upload file vagrant box image!

*** Cách tạo vagrant box image thì bạn vào thư mục chứa vagrant box trên máy và gõ lệnh:

vagrant package –output test.box

test.box là một cái tên tuỳ thích của box image bạn muốn output ra nhé.

Việc tạo ra file image mất vài phút 😉

Trên vagrant cloud có các gói plan khác nhau, bạn có thể tham khảo:

https://app.vagrantup.com/pricing

Share vagrant trên MAC với ngrok

Để chia sẻ Vagrant lên cloud (https://www.vagrantup.com/docs/share/) bạn cần sự hỗ trợ của ngrok. Bài viết này hướng dẫn chia sẻ vagrant trên mac.

Bước 1: Tạo tài khoản nơi bạn muốn chia sẻ: https://app.vagrantup.com/

Bước 2: Cài đặt ngrok lên máy Mac. Cài như sau:

+ Tải ngrok tại: https://ngrok.com/download

+ Làm theo hướng dẫn ①②③ như web trên hướng dẫn

+ Đưa file ngrok vào Applications

+ Tạo symlink, làm như sau:

# cd into your local bin directory
cd /usr/local/bin

# create symlink
ln -s /Applications/ngrok ngrok

Bước 3: Trên máy tính, tại thư mục Vagrant box mà bạn sẽ chia sẻ, hãy vagrant up!

Bước 4: Vagrant login (login vào cloud )

Bước 5: vagrant share

Done!

Cài đặt các loại phiên bản php trên centos

Trong bài này giả sử cài với php 5.6 nhé!

Với các phiên bản khác có thể làm tương tự.

1 sudo yum install epel-release

2 wget http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

3 sudo rpm -Uvh remi-release*.rpm

4 sudo nano /etc/yum.repos.d/remi.repo

5 sudo yum install php56

6 sudo yum install php-fpm php-mysql php-gd php-mbstring php-pear php-xml php-xmlrpc php-devel php-phalcon php-mcrypt php redis php-xdebug

7 php -v

——————————Giải thích các lệnh——————————

Lệnh 1. Cài EPEL repository

Lệnh 2. Remi repository (Remi repository là kho lưu trữ cho PHP trên CentOS hỗ trợ cài đặt PHP phiên bản 5.4/5.5/5.6 và PHP 7.)

Lệnh 3. Sau khi đã tải về file RPM ở trên, sử dụng lệnh số 3 để cài đặt

Lệnh 4. Để lựa chọn phiên bản PHP cần cài, bạn cần bật nó trong Remi repository. Mở và chỉnh sửa file /etc/yum.repos.d/remi.repo

Các bạn có thể thấy trong đó có các mục: [remi] đối với PHP 5.4, [remi-php55] đối với PHP 5.5 và [remi-php56] đối với PHP 5.6. Để bật phiên bản bạn muốn cài, sửa đoạn “enabled=0” thành “enabled=1“.

Lệnh 5. cài php

Lệnh 6. Cài PHP-FPM và một số package của PHP

Lệnh 7. Kiểm tra version của php

Tạo user và cho phép remote vào mysql v5~, Centos7

Trước tiên phải chỉnh sửa một chút cho file:
sudo vi /etc/my.cnf
Thêm dòng: bind-address = ::
Dòng này giúp cho mysql cho phép truy cập từ địa chỉ IP được setting, trường hợp này là toàn bộ IP đều truy cập được.
Tất nhiên có thể giới hạn bằng IP bạn muốn.

Login vào mysql với tài khoản root  như bình thường, sau đó tạo user mới dành cho việc remote như sau:

Tạo user tên newnam, tất nhiên bạn phải indentity bằng tài khoản root toàn quyền đang có nhé, giả sử user root và pass hiện tại là: ‘root@r3x/gi?%leA/
CREATE USER ‘newnam’@’localhost’ IDENTIFIED BY ‘root@r3x/gi?%leA/’;
CREATE USER ‘newnam’@’%’ IDENTIFIED BY ‘root@r3x/gi?%leA/’;
GRANT ALL ON *.* TO ‘newnam’@’localhost’;
GRANT ALL ON *.* TO ‘newnam’@’%’;
Hãy đổi pass cho user: newnambằng những lệnh sau:
use mysql;
alter user ‘newnam’@’localhost’ identified with mysql_native_password by ‘newPass’;
Cuối cùng:
sudo service mysqld restart
login từ xa bằng tài khoản newnam@newPass nhé!

Sử dụng vagrant như thế nào?

ダウンロード

Đầu tiên các bạn cài đặt: Visual box, git, và vagrant nhé.

Cách cài đặt hãy google search

Tiếp theo, sau khi cài xong thì sử dụng như thế nào. Vagarnt bạn vừa tạo ra, đang trống trơn, để có thể sử dụng được cần box, vậy box là gì?

Box là một image chứa các thành phần có sẵn, bạn có thể hiểu rằng, box này chính là hệ điều hành bạn sẽ sử dụng. Bạn tìm box bạn muốn cắm vào vagrant trên trang này nhé: https://www.vagrantbox.es/

Hãy tìm box bạn muốn sử dụng và copy url của nó.

Bạn dụng Git Bash để tạo box nhé.

Mở Git Bash và gõ:

 $ vagrant box add {title} {url}

title: do bạn tự đặt

url: là đường dẫn bạn vừa copy từ https://www.vagrantbox.es/.

(Hoặc bạn có thể tìm box trên: https://app.vagrantup.com/)

Tiếp theo, để tạo máy ảo mới, bạn cần tạo một thư mục riêng cho nó, bạn có thể gõ lệnh dưới để tạo thư mục tên là vm_name

Lưu ý,  bạn cần di chuyển tới /c/Users/[user_name] để tạo thư mục!

 $ pwd mkdir vm_name
 $ cd vm_name

 

 $ vagrant init {title}

Nếu nhận được thông báo:

$ vagrant init centos7                                                                                                                                                                                                                                                         
A `Vagrantfile` has been placed in this directory. You are now                                                                                                                                                                                                                 
ready to `vagrant up` your first virtual environment! Please read                                                                                                                                                                                                              
the comments in the Vagrantfile as well as documentation on                                                                                                                                                                                                                    
`vagrantup.com` for more information on using Vagrant.                                                                                                                                                                                                                         

Bạn đã nạp thành công!

Hãy khởi động vagrant lên bằng dòng lệnh:

 $ vagrant up
-> login vào máy ảo bằng dòng lệnh:
 $ vagrant ssh

Tiếp theo, bạn tiến hành cài đặt server cho máy ảo như thông thường vẫn làm.

Nhưng để từ máy tính cá nhân của bạn có thể truy cập tới server trên máy ảo, bạn cần sửa lại file Vagrantfile, ở dòng 26, 35 bỏ comment đi:

config.vm.network “forwarded_port”, guest: 80, host: 8080

config.vm.network “private_network”, ip: “192.168.33.10”

Nhớ vagrant halt lại  máy ảo, sau đó vagrant reload và có thể truy cập vào http://192.168.33.10 nhé!

Ngoài ra để đồng bộ dữ liệu từ máy cá nhân tới thư mục web, bạn bỏ comment của dòng 46 của file Vagrantfile, và sửa lại kiểu như:

config.vm.synced_folder “D:/dev/test”, “/var/www/html”

(iginx: “/usr/share/nginx/html”)

Như thế, mọi dữ liệu ở ổ D:/dev/test sẽ được tự động đưa vào /var/www/html ở thời gian thực!

Rails まとめる!

Railsとは

Railsとは、Rubyプログラミング言語で書かれたWebアプリケーションフレームワーク(MVC)です。 Railsは、あらゆる開発者がWebアプリケーションの開発を始めるうえで必要となる作業やリソースを事前に仮定して準備しておくことで、Webアプリケーションをより簡単にプログラミングできるように設計されています。

 

① Railsをインストール(MAC OS)

  1. Homebrewをインストールする

Homebrewとは「ユーザが自らパッケージをビルドして使用する」、これをインストールするためには、Command Line Tools for Xcodeを先にインストールする必要があります

ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”

 

  1. Rubyをインストールする

デフォルトで入っているrubyより、最新のrubyをインストールして使用します。そのために、rbenvというツールをインストールします。

  1. rbenvをインストール

rbenvとは、rubyのバージョンを管理してくれるツールです

$ brew update
$ brew install rbenv ruby-build
$ echo ‘eval “$(rbenv init -)”‘ >> ~/.bash_profile
$ source ~/.bash_profile

  1. Rubyをインストール

$ rbenv install -l # 2.0.0-pXXXを探してください
$ rbenv install 2.0.0-pXXX # 上で探した2.0.0-pXXXを入力
$ rbenv global 2.0.0-pXXX # 上で指定した2.0.0-pXXXを入力
$ ruby -v # 2.0.0-pXXXが表示されることを確認

 

  1. MySQLをインストール

$ brew install mysql

  1. Railsアプリの作成準備

必要最低限なgemをインストールします。それ以外は、Bundlerで管理することになるはずです。

$ gem install bundler
$ gem install rails
$ rbenv rehash

ここまで来たらrails newコマンドでrailsアプリを作成していけます。

 

  1. Railsプロジェクトを作成

rails new myapp

rails new myapp -d mysql(MySqlを使います)

cd myapp

rake db:create (データベースを作ります)

rails s(Railsサーバーを起動します)

myappのウェブサイト: http://localhost:3000

 

② MVCに基づく設計

 

後述しますが、モデルやコントローラのひな形を自動生成してくれる便利なコマンドがあります。

基本的な処理はそのコマンドから初めて、必要な箇所だけあとから編集、というのがおおまかな処理の流れになると思います。

 

③ RailsのMVC

  1. Model

app/models に配置されます。

Modelは ActiveRecord::Base クラスを継承したものになります。

基本的な CRUD (Create, Read, Update, Delete) の仕組みはベースクラスで定義されているため、特殊な処理がないモデルの場合は以下のように定義するだけで基本的な機能を使うことができます。

コメントで指摘もらいましたが、あくまでその処理を行うことが定義されている、という意味です。

なので実際にアプリケーションとして実行可能な状態にするにはコントローラなどとの連携が必要になります。

Modelで使用される型

概要
string 文字列
text 長い文字列
integer 整数
float 浮動小数点数
decimal 精度の高い小数
datetime 日時
timestamp タイムスタンプ
time 時刻
date 日付
binary バイナリ
boolean 真理値
primary_key 主キー

 

  1. Controller

 

app/controllers に配置されます。

ユーザからの操作を受け付けて、アプリケーションの動作を決定するコントローラです。

  • ルーティングを設定する

プロジェクトディレクトリの下に config ディレクトリがあります。

その中の routes.rb ファイルにルートをに関する設定をしてあげると自動的にそのルーティングを行う処理を実行してくれます。

Rails.application.routes.draw do
   resources :projects

end

  • rootを設定する

サイトトップにアクセスしたときなどに、どこを表示して欲しいかをコントローラとアクションの単位で指定しておくことができます。

例:root ‘projects#index’

上記のようにすると、トップに来た場合に projects の index アクションが実行されます。

  • URLの階層を定義する

以下のようにすることで、あるモデル以下に紐付いた他モデルのデータ(has many的な)を表示、というようなURLのルーティングを実現することができます。

(いわゆるhas manyの関係にあるデータの表示とか)

resources :projects do
   resources :tasks, only: [:create, :destroy]
end

こうすることで、とあるプロジェクトに紐付いたタスク一覧を表示するURLを設定することができます。

  • 特定URLをアクションに結びつける

このURLにアクセスしたらこのアクションを実行したい、という場合は以下のようにすることで設定することができます。

post ‘/projects/:project_id/tasks/:id/toggle’ => ‘tasks#toggle’

tasks はコントローラです。そのコントローラの toggle メソッド(アクション)を実行する設定です。

  • Controllerのルーティングを確認する

ルーティングの設定ができたら rake routes コマンドでルーティングを確認することができます。

  • before_action, after_action

モデルの取得など、各アクションの中で共通に処理する部分があるかと思います。

その際に、同じことを書くのはDRYに反するので、before_action や after_action に処理をまとめることで共通化することができます。

具体的には以下のようにします。

controller:

class ProjectsController < ApplicationController
   before_action :anyMethod, only: [:show, :edit]

   private
       def anyMethod
           # do common action
       end
end

ちなみにこの before_action という記述はRubyの機能で、クラス・メソッドなどを指定するとそれがクラス宣言時に実行されるようになります。

※ コメントで指摘をもらったので補足しておきます。before_action というメソッド自体はRails側の機能です。ただ、クラス宣言時に実行される、という点がRubyの機能という意味です。

  • Controllerに関する規約

モデルを操作するコントローラを作成する場合は同様に、モデル名の複数形で作成する必要があります。上記の例で言えば Projects。

さらに、上記のルーティングで示されている Controller#Action の項目が、コントローラにどのメソッドを実装したらどのアクションが実行されるかを表しています。

例えば、index メソッドを実装すれば /projects(.:format) にアクセスされたときにそれが実行されます。

 

  1. View

app/views に配置されます。

HTMLをレンダリングし表示するビュー。

ちなみに ERB(Embed RuByの略) を利用してHTMLを構築します。

<% if (hoge) %>
   ここにHTML
<% end %>

<%= hoge.name %>

<% ~ %> と <%= ~ %> という記述方法がある。

前者はRubyを実行するだけで返り値は無視されますが、後者は戻り値がそのままHTMLとして出力される点が異なります。

パーシャルを使う

DRY(Don’t repeat your self)の精神で、同じことを記述することを避けるのがRails風です。

ということで、Viewの中で同じ記述が現れる箇所がある場合は、「パーシャル」という機能を使ってまとめておくと便利です。

パーシャルの使い方にもルールがあり、以下のように記述します。

<%= render ‘hoge’ %>

上記は erb ファイルの一部です。上記のように render メソッドを使ってパーシャルを呼び出します。

パーシャル自体は、Viewsの中に、renderの引数に渡された文字列にアンダースコアを付けたファイル(上記の例では _hoge.erb)を作成し、そこに共通項目を書きます。

あとはRailsが規約に則って該当のパーシャルのその位置に読み込んでくれます。

Viewに関する規約

Viewに関する規約は、コントローラのアクション名と同名のファイル名にする、という点です。

(例えば index アクションなら index.html.erb ファイル)

共通テンプレート

Viewはまた、共通テンプレートを持つことができます。HTML内のhead要素などサイト内で共通にしておきたいものはたくさんあると思います。

それらについては app/views/layouts ディレクトリ内に配置されます。

また、各Viewに記述された内容はテンプレート内の <%= yield %> に展開されるようになっています。

 

④ Railsのコマンド

 

よく使うコマンドだけメモします。参考:http://railsdoc.com/rails

  1. Scaffold: 全部入り

 

$ rails generate scaffold NAME [field[:type][:index] field[:type][:index]] [options]

 

NAME モデル名 (単数系)。under_score記法とCamelCased記法どちらでもよい
field カラム名
type
index インデックス(uniqueかindex)
options オプション

 

例: $ rails generate scaffold AdminUser name:string mail:string

  1. Scaffold_controller

コントローラとビューをデフォルトのアクション(index〜destroyの計7つ)で生成する

$ rails generate scaffold_controller NAME [options]

 

NAME モデル名(単数系)。under_score記法とCamelCased記法どちらでもよい。
options オプション

 

例: $ rails generate scaffold_controller AdminUser

  1. Controller: コントローラとビューを生成する

$ rails generate controller NAME [action action] [options]

 

NAME コントローラ名(単数系か複数系かは用途に合わせて )。under_score記法とCamelCased記法どちらでもよい
action アクション
options オプション

 

例: $ rails generate controller AdminUsers index show

 

  1. Model:モデルとマイグレーションを生成する

$ rails generate model NAME [field[:type][:index] field[:type][:index]] [options]

NAME モデル名 (単数系)。under_score記法とCamelCased記法どちらでもよい
field カラム名
type
index インデックス(uniqueかindex)
options オプション

 

例:$ rails generate model AdminUser name:string mail:string

  1. Migration:マイグレーションを生成する

$ rails g migration NAME [field[:type][:index] field[:type][:index]] [options]

 

NAME マイグレーション名
field カラム名
type
index インデックス(uniqueかindex)
options オプション

 

例:$ rails generate migration AddGroupIdToAdminUsers group_id:integer

  1. マイグレーション実行

$ rake db:migrate


⑤ 命名の慣習

  1. 大文字小文字

RubyとRailsの慣習を以下に示します。

  • クラス名: アッパーキャメルケースで表記します。例: MyClass
  • メソッド名: スネークケースで表記します。例: update_attribute
  • 変数名: スネークケースで表記します。例: @user_name

(参考:キャメルケースとスネークケース

 

  1. メソッド名の選定

メソッド名の命名に使う語彙にも慣習があります。

  • プロパティ的なメソッドには動詞を含めず、名詞のみで。
    • ○: def width
    • ○: def width=(val)
    • ×: def get_width
    • ×: def get_width=(val)

.get_widthとしなくても.widthだけで十分意味が通じるという考え方です。

以下はよく知られた慣習だと思います。

  • true/falseを返すメソッド名の末尾には?を付けます。例: valid?
  • メソッド名から推測されるよりも破壊的なメソッドの末尾には!を付けます。例: save!

前者は意味を限定して明確にし、後者は使用上の注意が必要であることを知らせます。

  1. コントローラ名とモデル名

Railsでは、コントローラ名は英語の複数形で終わり、モデル名は英語の単数形で終わることが前提となっています。また、コントローラ名とモデル名が互いに関連する場合には原則として一貫した命名をする慣習があります。

たとえば、ユーザープロファイルを扱うコントローラとモデルを作成する場合、コントローラ名はUserProfiles、モデル名はUserProfileとします。

1.#コントローラ

class UserProfiles < ApplicationController

end

2.#モデル

class UserProfile < ActiveRecord::Base

end

コントローラ名とモデル名はどちらもクラス名なのでキャメルケースで表記しますが、それぞれが保存されるファイルの名前はスネークケースで記述しますので注意してください。

  • コントローラ名: user_profiles_controller.rb
  • モデル名: user_profile.rb

なお、モデルと関連付けられるデータベースのテーブル名は「複数形かつスネークケース」となります。

デバッグ

1. ビューファイルのデバッグ

ビュー内では、次のようにdebugメソッドを使うことで、変数の値や、パラメーターの値を表示することができます。

# ビューファイル
<!–  develompent環境のときにデバッグ情報を表示する –>
<%= debug  if Rails.env.development? %>
<!– インスタンス変数(@products)の値を表示する –>
<%= debug @products %>

<!– paramsの内容を画面に表示する。–>
<%= debug params %>

<!– 他にも、session、headers、params、flash、request、responseなどの値も表示できます –>

2. モデルとコントローラーでのデバッグ

モデルとコントローラーではビューと違って画面表示がないので、logger.debugメソッドを使い、ログファイルに情報を出力します。

# コントローラーかモデル
logger.debug “出力したいデバッグ情報”

ブレイクポイントを設定した本格的なデバッグ

まず、pry-byebugというデバッグを実行できるようにするGemを追加します。

# Gemfile
group :development, :test do
 gem ‘pry-rails’  # rails console(もしくは、rails c)でirbの代わりにpryを使われる
 gem ‘pry-doc’    # methodを表示
 gem ‘pry-byebug’ # デバッグを実施(Ruby 2.0以降で動作する)
 gem ‘pry-stack_explorer’ # スタックをたどれる
end

 

Bundlerでインストールします。

bundle install

あとは、ビュー、コントローラー、モデルなど詳細にデバッグを行いたい箇所にbinding.pryと記載するとそこがブレイクポイントになります。

あとは、実際にそこの箇所になれば、サーバーが停止し、interactiveなモードになります。
例:
  <p>
     <strong>Username:</strong>
     <%= @user.username %>
=>   <% binding.pry %>
  </p>
   <p>
    <strong>Email:</strong>
    <%= @user.email %>
  </p>

そこで、変数の内容を表示したり、変数定義やコマンドを試すことができます。

また、次の4つのコマンドでソース内を移動できます。

next   # 次の行に移動する
step   # 次の行か、メソッド内の行に移動する
exit   # 次のブレークポイントまで実行する
finish  # 現在のスタックトレース(画面に表示されているメソッド)が終わるまで実行する

参考:http://guides.rubyonrails.org/debugging_rails_applications.html

⑦ GEM

Rubyのサードパーティ製のライブラリの形式のこと

  • 7つの開発用Gem

すべてのRailsプロジェクトでいれておくべき7つの開発用Gem(参考:

http://qiita.com/icb54615/items/374f76b38f673fab7744

Gemを検索サイト:https://rubygems.org/