Ruby on Railsでログインを実装した!(Devise未使用)
以前、Deviseを使ったログイン方法を書きましたが、今回は全く使わない方法を書きます。 ちなみに、Deviseを使った方法は簡単ですがいらない機能が出てしまうので結構めんどくさいですw
やり方
- まず下記RubyGemを追加します。
gem 'omniauth' gem 'omniauth-twitter'
Rails.application.config.middleware.use OmniAuth::Builder do provider :twitter, `twitter_token`, `twitter_token_secret` end
- ログインのために、Userモデルを作成してください。
rails g model user provider:string uid:string user_name:string
ここのproviderでは、Twitterやfacebookなどの連携先を示しています。
uidはその連携先の各個人のIDです。ちなみに、このIDでユーザを検索することができます。
- Userモデルを記述していきます。
/app/models/user.rb
class User < ApplicationRecord
def self.find_or_create_from_auth(auth)
provider = auth[:provider]
uid = auth[:uid]
user_name = auth[:info][:user_name]
self.find_or_create_by(provider: provider, uid: uid) do |user|
user.user_name = user_name
end
end
end
- ログイン用のコントローラーを作成します。
rails g controller sessions
- そして、コントローラーないを記述します。
class SessionsController < ApplicationController
def create
user = User.find_or_create_from_auth(request.env['omniauth.auth'])
session[:user_id] = user.id
flash[:notice] = "ユーザー認証が完了しました。"
redirect_to root_path
end
def destroy
reset_session
flash[:notice] = "ログアウトしました。"
redirect_to root_path
end
end
最後にヘルパーメソッドと、ルーティングを編集し完成です!
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
helper_method :current_user, :logged_in?
private
def current_user
return unless session[:user_id]
@current_user ||= User.find(session[:user_id])
end
def logged_in?
!!session[:user_id]
end
def authenticate
return if logged_in?
redirect_to root_path, alert: "ログインしてください"
end
end
get '/auth/:provider/callback', to: 'sessions#create' get '/logout', to: 'sessions#destroy'
久しぶりすぎて全然覚えてなかった・・・
参考
Vimrcを公開してみた
gistに置いておくのもいいんだけど、あとでみるのがめんどくさいので
ブログに置いてみようと思います。
PHP×Docker(開発環境)
昨日書いた通り勉強を始めています。
久しぶりに他の言語をやるのでワクワクしてしています。
開発環境ですが、Dockerを使いました。
まあ、Rubyから使ってるのでこっちの方が楽かと・・・
目次
使用したもの
やり方
Docker導入等は省略します
PHPなので
php7-apacheを使っていこうと思います。 コンテナをPHP+Apacheでもいいですが、勉強するだけなので同一コンテナの運用で構わないかと思います。
DockerHub次に学習用のディレクトリを用意しましょう。今回は
php_studyと名前ををつけました。php_studyの中にDockerfileを作成します。そして中身は以下の通りです。
FROM php:7.2.10-apache RUN apt-get update -qq && apt-get install -y build-essential libpq-dev ENV TZ Asia/Tokyo RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone ENV LANG C.UTF-8 WORKDIR /var/www/html COPY /html /var/www/html
そのあとにhtmlディレクトリを作成します。そしてその中にindex.phpを作成します。
中身は以下の通りです。
<?php phpinfo();
Dockerを起動して、http://0.0.0.0:80を開くと以下のページが出ると思います。

Dockerの起動について
起動は毎回コマンドを打ってもいいですが、シェルやdocker-composeでまとめると便利です。
自分はsetup.shというシェルファイルを作成しました。
docker build -t php7-apache . && docker run --rm -d -p 80:80 php7-apache
まとめ
いかかですか? なんとなくhostを汚したくないなーと思って、Dockerでやりましたが 結構覚えることが多かったりするのでhostにphp+Apacheを入れてもいいのかなと思いました。
Ruby on RailsのERBをHamlに変更するやりかた。
はじめに
メモ用で書いてみました。
最近はHamlをよく使うようになりましたHaml。
めちゃくちゃ便利ですよねw
でも、Rails newしても生成されないですよね?
そこでERBをHamlに変更してみました。
Hamlとは
What is it? Haml (HTML abstraction markup language) is based on one primary principle: markup should be beautiful. It’s not just beauty for beauty’s sake either; Haml accelerates and simplifies template creation down to veritable haiku.
つまり、HTMLより簡潔に簡単にかけるテンプレートエンジンです。
導入について
Gemfileに以下を書います。
gem 'haml-rails'
ERB→Hamlに変更することできます。
bundle installをかけます。rails haml:replace_erbsをかけておしまい。
おそらくERBファイルが全て変わっていると思います。
便利なのでぜひ使ってみましょう!!!
研究室にGitLabを立てた話
お久しぶりです。
研究室にGitLabを立てたので話して行こうと思います。
導入したきっかけは?
元々研究室にはgitbucketがあったのですが、
- 使っている人間が少なかったこと(実際使っていたのは二人)
- メンテナンスがあまりされていなかったこと
- あと個人的にもう少しリッチな機能が欲しい
とのことで、他のツールの検討をはじめました。
いろいろ調べているとこんな記事を見つけました。
リッチな機能が搭載されていて、クローズな環境で動かせるGitLabってええやん
と思い早速導入を開始しました。
学生の評判は?
目的は研究室でみんな使って欲しいってことが1番の目的にしていたので、導入してからの働きかけには
だいぶ苦労しました。特に、「Gitって何?」と言った人が8割だったのでGitの基本の使い方勉強会を開いたことで
利用率もだいぶよくなったと思います。
また、通知がissueなどの通知はメールで送信されるところをslackと連携させることによって常に見る状況を作ったので だいぶ利用者が増えました。
苦労したこと
一番苦労したことは、導入ではなく運用だと思います。 貧弱なサーバで運用していたので、すぐにメモリの使用率が上昇してたことが運用する上で苦労したことです。 基本的にPrometheusと呼ばれる監視ツールがメモリを消費する原因の一つだったことがわかり現在はPrometheusを停止しています。 監視は外部のツールを使って監視するようにしています。
また、オープンソースってこともありちょくちょくバグが多いように思います。 よく、issueで「バグがある」と言った報告がありました。
現在もwikiを立てると500が出るバグあるので、公式なのかサーバの問題なのか調査する必要があると思います。
GitLabを導入したいと思っている研究室はぜひ入れてみたほうがええと思います。 でわでわ〜
お手軽Ruby on Rails開発環境を作ってみた
お久しぶりです。 最近、卒論に追われたり内定先の懇親会があったりと充実しているのかしていないのわからないです(笑)
今回はDockerでRuby on Railsの環境を作ってみました。
きっかけ
内定先の企業がDockerを使った開発を始めようとしているので、自分もすべての環境をDockerにしてみようかと思ったから。 しかし、毎回揃えていると結構時間がかかったり、書き方を忘れたりといろいろめんどくさいので一つにまとめてみました。
実際の使い心地
環境構築は結構容易でしたが、いろんなプロジェクトに対応させると結構大変かもしれません。 ファイル名の変更だったり、パスワードの変更だったりといろいろあります。
今後のやりたいこと
標準入力でファイル名を操作できるようにしたいと思ってます。 また、Ruby以外のものを作ってみたいですね。
また、卒論がんばろう・・・