開発のわだち(7):カレンダービューを編集する
「カレンダービューを編集する」
目標:fullcalendarのビューを変えてみる
ビューの編集はfull calendarが用意してくれてるオブジェクトがあるのでそれに従って変更します。
例えば、ここを参考に以下のように設定すると、
app/assets/javascripts/calendar.coffee
$(document).ready -> $('#calendar').fullCalendar header: left: 'prev,next today', center: 'title', right: 'month,agendaWeek,agendaDay', defaultView: 'month', slotMinutes: 30, timeFormat: 'H:mm',
こんな感じになります。
full calendarのリファレンスドキュメントがjavascriptで書かれているのでrailsで採用する場合はcoffeescriptに直す必要があります。
その時に利用させてもらってるのは、ここです。
まだまだjavascriptの知識が足りないぜ。
環境
ホストOS: MacOSX 10.11.3
VirtualBox: 5.0.14
Vagrant: 1.7.4
ゲストOS: CentOS 7ゲストOSの環境
Apache: 2.4.6
node.js: v0.10.43
ruby: 2.2.1p85
Rails: 4.2.6
fullcalendar-rails (2.6.1.0)
開発のわだち(6):herokuでデプロイ
「herokuでデプロイ」
目標:herokuでアプリをデプロイする
目次:
1.herokuコマンドを使えるようにする
2.herokuでオンライン上にデプロイする
1.herokuコマンドを使えるようにする
rails tutorialで勉強したことのあるherokuをvagrant環境に導入します。 まずは、ここからheroku-toolbeltをインストールするコマンドをコピー。 (僕はSTANDALONEから行きました。参考にさせて頂いたサイトはここです。)
$ sudo yum install wget # まずは"wget"コマンドを入手 $ sudo wget -O- https://toolbelt.heroku.com/install.sh | sh # コピーしてきたコマンドを実行 $echo 'PATH="/usr/local/heroku/bin:$PATH"' >> ~/.bash_profile # herokuコマンドのパスを通す(環境に合わせて~/.bash_profileとした) $ source ~/.bash_profile # 書き足したスクリプトを実行 $ heroku version # バージョン確認
以上でherokuコマンドが使えるようになりました。
2.herokuでオンライン上にデプロイする
railsのアプリをherokuで運用する場合、production環境にpgとrails_12factorのgemを入れる必要があるので、以下の通りgemファイルを修正します。
二つのgemを指定している理由はherokuのrails4.x向けチュートリアルにあります。
Gemfile
source 'https://rubygems.org' ...中略 group :production do gem 'pg' gem 'rails_12factor' end
Gemfileを変更したのでGemfile.lockを更新します。
$ bundle update # Gemfile.lockを更新。もしエラーが出たら先に"bundle install --without production"してproduction環境を分けちゃう。 $ bundle install --without production # productionグループに設定したgemはdevelop環境にはインストールしないという意味のオプション
herokuにデプロイするのはgitにcommitされたバージョンなので必ずコミットします。 (自分はコミットし忘れて結構ハマりました。。。)
$ git checkout master $ git add -A # "git add ."と"git add -u"を同時に行い削除も含めた全変更をステージング $ git commit -m "herokuでデプロイ用"
herokuにログインしてsshキーを登録します。 事前にherokuのwebサイトからアカウントを取得しておく必要がありますが、それは割愛。
$ heroku login # アカウント認証が求められるので入力。 $ heroku keys:add # sshキーを登録
herokuにdyno(デプロイ用のコンテナ?)を作成して、masterブランチにコミットされている内容をherokuのdynoにプッシュします。
$ heroku create $ git push heroku master # デプロイ完了! $ git config --list | grep heroku # これでgit config上に登録されたことを確認 $ heroku rename "アプリの名前" # アプリの名前はheroku上でユニークになる必要があります。
以上でデプロイ完了です。herokuはすごい!w
環境
ホストOS: MacOSX 10.11.3
VirtualBox: 5.0.14
Vagrant: 1.7.4
ゲストOS: CentOS 7ゲストOSの環境
開発のわだち(5):カレンダービューを導入する
「カレンダービューを導入する」
目標:fullcalendarのgemを導入してカレンダービューを表示
目次:
1.FullCalendar-gemを追加
2.ブラウザからアクセスしてカレンダを表示
1.FullCalendar-gemを追加
何があるかわからないので、トピックブランチを切ります。
$ git branch hagehage * master $ git checkout -b fulcal # 新しいブランチを作成し、同時にそのブランチに移動する。
カレンダービューを探していたら「月/週/日」表示に対応していてGoogle calendarとの連携まで準備してくれている素晴らしいものがあったので、こちらを採用しました。
full calendarというライブラリですがrails用のgemも存在していてこれを取り込むところから始めます。
こういうのは該当のgemのREADME.mdに従うに限りますw
まずはGemfileに以下の行をを追記。
gem 'fullcalendar-rails' gem 'momentjs-rails'
そして、依存関係から先にアセットパイプラインにセットしておくべきgem 'momentjs-rails'
をapplication.jsにセットします。
app/assets/javascripts/application.js
//= require moment
application.jsを編集した上でgemをインストール。
$ bundle
gemインストール後に生成されたfull calendarのjsとcssをアセットパイプラインに追加します。
app/assets/stylesheets/application.css
*= require fullcalendar
app/assets/javascripts/application.js
//= require fullcalendar
これで環境は整いました。
2.ブラウザからアクセスしてカレンダを表示
まずはカレンダービューを表示するページまでのルートを作るところから。
routes.rbを編集して最初にアクセスされるページを変更します。
config/routes.rb
Rails.application.routes.draw do root 'application#index' # 最初にアクセスされる画面はapplication_controllerのindexアクションですよという設定。 end
次にapplication_controller.rbにindexアクションを設定。
app/controllers/application_controller.rb
class ApplicationController < ActionController::Base protect_from_forgery with: :exception # indexアクションを設定。 def index end end
indexアクションに反応するviewを作成します。
app/views/application/index.html.erb
<h1>help!</h1>
これで、http://192.168.33.10:3000
にアクセスすると以下のような画面が表示されるようになります。
次にカレンダーを表示する画面です。bundle
した際に生成されたindex.html.erbを編集します。
ここでも、オフィシャルのDocsに従うためここを参考にしました。
app/views/calendar/index.html.erb
<h1>Calendar#index</h1> <div id="calendar"></div> # カレンダー(jquery)を表示する場所(id)を設置 <p>Find me in app/views/calendar/index.html.erb</p>
htmlに表示するデフォルトのカレンダーを生成するcalendar.coffeeを編集します。
(これもbundleのタイミングで生成されている)
app/assets/javascripts/calendar.coffee
$(document).ready(function() { $('#calendar').fullCalendar({ }) });
javascriptは本当にわからない。。。
何れにしても、これで準備は整ったはずなのでブラウザからカレンダービューのディレクトリにアクセスしてみます。
urlはhttp://192.168.33.10:3000/calendar/index
。
すると
わからないが祟ってエラー。。。
いろいろ調べてみると("いろいろ"とか言って二日間調べましたが)ここはcoffeescriptで書かなきゃならないらしく、公式ドキュメントに書いてあるjavascriptコピーするだけじゃダメなようです。
なので、Try Coffee Scriptを使って編集し直しながら、以下のように書き直しました。
app/assets/javascripts/calendar.coffee
$(document).ready -> $('#calendar').fullCalendar()
こちらのサイトも参考にさせて頂きました。
改めてhttp://192.168.33.10:3000/calendar/index
にアクセス。
15秒くらいガッツポーズしました。 javascriptとcoffeescript勉強しないとな。。。頑張ります。
一時期見当はずれな方向を調べ漁って、アセットパイプラインとかExecJSのRuntimeErrorとかに詳しくなりましたw。 (ちなみに一緒にやってる学生は2時間くらいで出来ちゃってました。さすがや。。)
すかさずバージョンをリモートリポジトリへ。
$ git add . $ git commit -m "got it, see calendar view" $ git checkout master # 冒頭で作成したトピックブランチからmasterブランチに戻ります。 $ git merge fulcal # 作業していたトピックブランチをmasterブランチにマージします。 $ git push -u origin master
以上です。 次回からは、表示の切り替えやスケジュールの登録をやっていきたいと思います。
環境
ホストOS: MacOSX 10.11.3
VirtualBox: 5.0.14
Vagrant: 1.7.4
ゲストOS: CentOS 7ゲストOSの環境
Apache: 2.4.6
node.js: v0.10.43
ruby: 2.2.1p85
Rails: 4.2.6
fullcalendar-rails (2.6.1.0)
開発のわだち(4):自分の開発環境を作る【3】
「自分の開発環境を作る【3】」
目標:ゲストOSのコードをgithubでバージョン管理する
目次:
1.git(ローカルリポジトリ)の環境設定
2.githubアカウントにsshキーを追加
3.githubのリモートリポジトリにプッシュ
1.git(ローカルリポジトリ)の環境設定
git自体はインストール済みなのでここには書きません。
(「前回の記事」の“1.rbenv/ruby-buildをインストール”参照)
まずはgitconfigの設定。自分は以下のように設定しました。(この内容は/home/vagrant/.gitconfig
に反映される。)
$ git config --global user.name "自分の名前" $ git config --global user.email "自分のメールアドレス" $ git config --global push.default matching # 今後のgitリリースに前方互換するためのオプション $ git config --global alias.co checkout # "checkout"コマンドを"co"で済ませるエイリアス $ git config --global color.ui true # レスポンスがカラフルになって見やすくなる
次に、アプリのディレクトリの中でリポジトリを作成しgitの監視下に置きます。
$ git init Initialized empty Git repository in /"アプリのディレクトリ"/.git/ # リポジトリを初期化(ディレクトリ内に.gitディレクトリが作られる) $ git add . # ディレクトリ内の全フォルダ及びファイルをindexにステージングする $ git commit -m "バージョンをコミットする時のコメント" # -mはcommitと同時にコメントを付記するオプション。ローカルリポジトリにコミットする。
なお、gitの概念理解については以下を参考に勉強させて頂きました。
・Pro GIt
->少なくともChapter4までは読んだ方がいい。
・【CoEdo.rb】GitとGitHubはじめの一歩
->ローカルリポジトリ、リモートリポジトリの両方を含めた概念、及びハンズオン
・Git初心者に捧ぐ!Gitの「これなんで?」を解説します。
->ローカルリポジトリの概念を説明
・はじめてgitをつかったのでコマンドを復習します
->diff,HEADコマンドの考え方
・ドットインストール git入門 (全22回)
->ここはマジで最高
・よく使う git diff コマンド
->diffの話、参考リンク先にビジュアルな説明あり
2.githubアカウントにsshキーを設定
githubにアカウントを作成する流れは割愛します。
githubのリモートリポジトリにプッシュするためにはsshキーを設定します。
基本的にはオフィシャルに従うので、ここの通りにやるに尽きます。
ページトップでMacかWindowsのどっちかしか選択できず、こちとらCentOSなので不安になりましたが、Macで行きました。
$ ls -al ~/.ssh # 既存の公開鍵のチェック $ ssh-keygen -t rsa -b 4096 -C "自分のメールアドレス" # 公開鍵と秘密鍵のペアを発行 Enter file in which to save the key (/home/vagrant/.ssh/id_rsa): # 鍵の保存場所を指定(コロンの後には鍵の名前をつけられる。空でもOK)パスにvagrantが入っていて自分の名前がなくても不安になるな。 Enter passphrase (empty for no passphrase): # パスワードを設定できる。空でもOK Enter same passphrase again: # パスワードの確認 Your identification has been saved in /home/vagrant/.ssh/id_rsa. ...略 $ eval "$(ssh-agent -s)" # ssh-agentを起動して $ ssh-add ~/.ssh/id_rsa # 追加する $ pbcopy < ~/.ssh/id_rsa.pub # pbcopyコマンドが使えなければ、直接ファイルを見に行ってコピーしちゃいましょう。自分はそうしました。
コピーしたパスワードをこのページの指示通りにsshキー登録するとgithubへのキー登録は完了です。
補足
Cyberduckで.sshなどの隠しフォルダ/ファイルを表示するには、“環境設定”=>“ブラウザ”タブ=>“'.'で始まるファイルを表示”にチェックを入れて、Cyberduckを再起動すると表示されます。
3.githubのリモートリポジトリにプッシュ
githubにリモートリポジトリを作成する画面は以下の通りです。
画像はrails tutorialからの抜粋です。
"Repository name(必須)"と"Description(任意)"を設定して"Public"を選択します。READMEや.gitignoreはrails new
で生成しているので"Initialize this repository with a README"のあたりはそのままでOKです。
"create repository"でリモートリポジトリが作成されます。
アカウント画面に戻るとRepository nameのリモートリポジトリが作成されているので、クリックします。 以下四つの選択肢が表示されます。
1.Quick setup — if you’ve done this kind of thing before
2.…or create a new repository on the command line
3.…or push an existing repository from the command line
4.…or import code from another repository
今回はすでにローカルリポジトリがあり、リモートにプッシュしたいので3番目を選択し、そこに書いてあるコマンドを実行します。
$ git remote add origin git@github.com:"アカウント名"/"作成したリモートリポジトリ名".git # ローカルリポジトリの直下の/.git/configの"remote origin"にリモートリポジトリのurlを設定。 $ git push -u origin master # ローカルリポジトリをリモートリポジトリにプッシュ
これで、git及びgithubでリポジトリの管理ができます。 よっしゃー
自分はリモートリポジトリへのプッシュにだいぶ苦しみました。。
大事なのは、キーペアの発行はgithubのオフィシャルを信じることw
それとキーペア「~/.ssh/config
」やローカルリポジトリのconfig「"リポジトリのディレクトリ"/.git/config
」を細かく確認して誤った設定が残っていないかチェックするのも大事だと思います。
自分が成功した設定例を以下に。
~/.ssh/config
Host github.com User git port 22 Hostname ssh.github.com IdentityFile ~/.ssh/id_rsa TCPKeepAlive yes IdentitiesOnly yes
"リポジトリのディレクトリ"/.git/config
[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote "origin"] url = git@github.com:"アカウント名"/"作成したリモートリポジトリ名".git fetch = +refs/heads/*:refs/remotes/origin/* [branch "master"] remote = origin merge = refs/heads/master
復習してたら~/.ssh/config
は生成されなかった。。。
本当は不要なファイルなのかも。。
環境
Vagrant 1.7.4
VirtualBox 5.0.14
Apache/2.4.6
その他お世話になったサイト
GitHub 初心者による GitHub 入門(1)〜 git のインストールとセットアップ・リポジトリの作成・ clone 〜
->何度もローカルリポジトリ外でプッシュしようとしてエラーをくらいました。。 Githubにport:22 で push できなかった場合の対処法
->$ ssh -T git@github.com
は認証確認に超つかえます。
やっぱりssh秘密鍵にpassphraseを設定したい時
->ssh秘密鍵のpassphraseを修正・追加(no passphraseから新たにpassphraseを設定する)。
RSAとSSH公開鍵の接続設定で困ったら
->ssh-keygen
は一度間違えると色々なところが書き換わっちゃうので関連ファイルの確認が必要
開発のわだち(3):自分の開発環境を作る【2】
「自分の開発環境を作る【2】」
目標:Vagrant上のCentOs7にRailsアプリを立ち上げてブラウザからアクセス
目次:
1.rbenv/ruby-buildをインストール
2.Rubyのインストール
3.Railsのインストール
4.ブラウザからゲストOSのRailsアプリにアクセス
1.rbenv/ruby-buildをインストール
Rubyバージョン管理するためにrbenvとruby-buildをインストールします。 両者を適切にインストールするために必要な環境はこちらを参照。
$ sudo yum install -y gcc bzip2 openssl-devel libyaml-devel libffi-devel readline-devel zlib-devel gdbm-devel ncurses-devel git make sqlite-devel net-tools
同じタイミングで以下もインストールしてます。
そのあとの手順についてはこちらとこちらを参考にさせて頂きました。
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv # githubからrbenvのリポジトリをクローン $ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build # githubからruby-buildのリポジトリをクローン $ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile # 「rbenvにパスを通す」というコマンドを~/.bash_profileに追記 $ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile # .rbenvの初期化コマンドを~/.bash_profileに追記 $ source ~/.bash_profile # ~/.bash_profileに書いた内容を実行 $ rbenv --version rbenv 1.0.0-19-g29b4da7 # rbenvのバージョンを確認
2.Rubyのインストール
rbenvを使ってRubyをインストールします。
$ rbenv install --list # インストール可能なRubyのリストを表示 $ rbenv install 2.2.1 # 今回はrails tutorial 第3版のcloud9仕様に合わせました。
これが結構時間かかります。。。
rbenvはディレクトリ毎にRubyのバージョンを管理できるので全体にかかるglobalのバージョンと個々のlocalを設定できますが、今回はglobalだけ設定します。
$ rbenv global 2.2.1 $ ruby -v ruby 2.2.1p85 (2015-02-26 revision 49769) [x86_64-linux]
3.Railsのインストール
railsはgemなのでgemからインストールします。
$ gem search -r rails # インストール可能なgemのリストを表示(-rはリモートのみを検索するオプション) $ gem install rails 4.2.6 --no-ri --no-rdoc # rails tutorial 第3版の4.2系に合わせてます。( --no-ri --no-rdocはドキュメント生成を省略するオプション) $ rails -v Rails 4.2.6
4.ブラウザから仮想マシンのRailsアプリにアクセス
ホストOSの3000番ポートをゲストOSの3000番ポートにフォワーディングするために、Vagrantfileを編集します。 Vagrantfileの中程にある以下の記述を、
# Create a forwarded port mapping which allows access to a specific port # within the machine from a port on the host machine. In the example below, # accessing "localhost:8080" will access port 80 on the guest machine. config.vm.network "forwarded_port", guest: 3000, host: 3000
"# config.vm.netw〜"の先頭の#を外してコメント解除して、guest/host双方のポート番号を3000に変更。→参考 設定を変更したら、ゲストOSを再起動する。
$ exit $ vagrant reload $ vagrant ssh
firewalld(iptablesのCentOS7用)をオフにします。
$ sudo systemctl stop firewalld.service # firewalld を無効にする $ sudo systemctl mask firewalld.service $ sudo systemctl list-unit-files | grep firewalld # OS 起動時もfirewalldが起動しないようにする firewalld.service masked
これを解決するのにかなりハマりました。基本的にはiptablesの停止方法しか見つからなくてCentOS7から使われているfirewalldについてはあまり参考情報がないんですね。参考にさせて頂いたのはこちらの記事です。
railsアプリを作成して起動します。rails4.2系を仮想マシンで動かす時は注意が必要なようです。
$ rails new "作りたいアプリ名" $ cd "作りたいアプリ名" # 作成した("作りたいアプリ名")ディレクトリに移動 $ rails server -b 0.0.0.0 # -bはbindオプション。rails4以降でゲストOSのアプリにアクセスする場合はこのオプションが必須
ここでJavascriptのランタイムが存在しないというエラーが発生した場合はnode.jsをインストールします。
エラーの例
There was an error while trying to load the gem 'uglifier'. (Bundler::GemRequireError)
自分はこちらのサイトを参考にさせて頂きました。
ちなみにtherubyracerではなくnode.jsを選んだのはherokuでデプロイを想定してるからです。(→参考)
$ sudo yum install epel-release $ sudo yum install nodejs npm $ node -v v0.10.42 $ rails server -b 0.0.0.0 # 改めてrailsを起動
ここまで来たらブラウザで以下にアクセス。
やっと会えたよ このやろう 長い道のりでした。。。 ありがとう!w
環境
Vagrant 1.7.4
VirtualBox 5.0.14
Apache/2.4.6
その他お世話になったサイト
Vagrant 1.8 + CentOS 7 + VirtualBox 5 + Ruby on Rails + Mysqlで開発環境構築
Vagrant で Ruby on Rails の環境を構築するまでの手順
Ruby on Railsチュートリアルの環境構築をvagrant上でやってみたまとめ
開発のわだち(2):自分の開発環境を作る【1】
「自分の開発環境を作る【1】」
目標:VagrantでCentOs7を起動しファイルの編集・確認を可能にする
目次:
1.VagrantでCentOS7を起動する
2.ホストOSのSublime TextでゲストOSの中のファイルを編集する
3.ゲストOSにWebサーバーをインストール
1.VagrantでCentOS7を起動する
まずは、ORACLEさんのVirtualBoxをインストール。
次にVagrantについてドットインストールさんで学び、Vagrant cloudからcentos/7のboxを取ってくる。
(※以降、VagrantをインストールしたMac OSをホストOS、Vagrant上で動くCentOsをゲストOSと呼びます。)
ゲストOSの中身を確認していると、ゲストOSとホストOSの共有ディレクトリと言われているディレクトリ
が、ない。
と言いつつも、名前から
にあたりをつけてみたところ正解でした。
そんで、セキュリティ対策も兼ねて全てのパッケージをアップデートします。
2.ホストOSのSublime TextでゲストOSの中のファイルを編集する
そのためにftp接続します(自分はCyberduckを使ってsftp接続。以下その方法)。
参考にさせて頂いたのは以下のサイトです。
ーーーー
今日からすぐできる!VagrantとVirtualBoxを使ってローカル開発環境を構築する方法【初心者向け】
ーーーー
ゲストOSから出ます。
Vagrantfileの設定を変更してprivate_networkからアクセス可能にする。
Vagrantfileの中程に以下の記述があるので、
"# config.vm.netw〜"の先頭の#を外してコメント解除してあげます。
設定を変更したので、ゲストOSを再起動します。
これで"192.168.33.10"を通してホストOSからゲストOSにアクセスできるようになったのでCyberduckの新規接続を作成します。
(※“/var/www/html”はWebサーバーをインストールしないと見えないかもしれないです。)
ちなみに、Sublime Textで編集するにはCyberduckの“環境設定”=>“ブラウザ”タブ=>“ダブルクリックしたファイルを外部エディタで開く”にチェックを入れて、“環境設定”=>“外部エディタ”タブ=>“Sublime Text”を設定すると便利です。
3.ゲストOSにWebサーバーをインストール
ブラウザからアクセスできるように(httpリクエストをさばけるように)するためにゲストOSにWebサーバーをインストールします。憧れのNginXは学習コストと納期を鑑みて諦めて、伝説のApacheに決めました。コマンドも簡単。
この状態でブラウザから"192.168.33.10"にアクセスすると
Apacheの初期画面に会えました!
ホストOSのエディタを使ってこのディレクトリを編集するには/var/www/htmlのパーミッションを「755」から「757」に変更しておく必要があります。
そんで、ゲストOSの/var/www/htmlに適当なhtmlファイルをアップする
内容が反映されます。
(※htmlファイルはwikipedeiaのhtmlの頁からコピーさせて頂きました)
環境
Vagrant 1.7.4
VirtualBox 5.0.14
Apache/2.4.6
次回からはここで作業を進めます。
開発のわだち(1):素人だけどチーム開発のリーダーになる
「素人だけどチーム開発のリーダーになる」
初めてのチーム開発。。
自分は趣味での開発しか経験したことがなく、プロの開発現場を全く知りません、が、
あるプロジェクトのアプリ開発リーダーに任じて頂き、仕事としてやらしてもらうことになりました。
メンバーは自分(脱サラ30歳)とエンジニア志望大学生二人(開発未経験)の3名構成で、手探りの開発です。
素人の僕は全員が同じOSで、同じプログラム、同じソフト、同じライブラリを入れて完璧に同じ環境で開発環境作らなきゃだめだって思ってました。
重ねて、自分が ポータブルPCはMacBookのAirしかもってなかったのもあって、「Vagrantじゃ重すぎるからDockerだ!!」と言ってDockerを検討しましたがハードルが高く断念。
途方に暮れて友人に聞くと『Rails開発ならRubyのバージョンとRailsのバージョンが合ってれば大丈夫だろ』と教えて頂き、そうすることに。
結果として、RubyとRailsのバージョンを合わせて、それぞれ好きなところで開発し、cloud9でマージしてherokuでデプロイ作戦に落ち着きました。
納期まで1ヶ月ですが、不安しかないです。。。