webプロダクトいんふぉ

webの気になった情報を発信中!!

Deviseのルーティング制御方法

Railsでログイン機能をつける時にはDeviseを使う時が多いと思いますが、アプリケーションによっては、新規登録はサービス管理者側で行い、誰でも会員登録ができる状態を避けたい状況もあると思います。 そこで、今回はDeviseを使用して、サービスのview側ではログインしかできない状態を作っていきます。

Deviesの初期設定は下記のようになっています。

|Prefix  |Verb  |URI Pattern  |Controller#Action  |
|---|---|---|---|
|new_user_session  |GET  |/users/sign_in(.:format)   |devise/sessions#new  |
|user_session  |POST  |/users/sign_in(.:format)  |devise/sessions#create  |
|destroy_user_session  |DELETE  |/users/sign_out(.:format)  |devise/sessions#destroy  |
|new_user_password  |GET  |/users/password/new(.:format)  |devise/passwords#new  |
|edit_user_password  |GET  |/users/password/edit(.:format)   |devise/passwords#edit  |
|user_password  |PATCH  |/users/password(.:format)  |devise/passwords#update  |
|user_password  |PUT  |/users/password(.:format)  |devise/passwords#update  |
|user_password  |POST  |/users/password(.:format)  |devise/passwords#create  |
|cancel_user_registration  |GET  |/users/cancel(.:format)  |devise/registrations#cancel  |
|new_user_registration  |GET  |/users/sign_up(.:format)  |devise/registrations#new  |
|edit_user_registration  |GET  |/users/edit(.:format)  |devise/registrations#edit  |
|user_registration  |PATCH  |/users(.:format)  |devise/registrations#update  |
|user_registration  |PUT  |/users(.:format)  |devise/registrations#update  |
|user_registration  |DELETE  |/users(.:format)  |devise/registrations#destroy  |
|user_registration  |POST  |/users(.:format)  |devise/registrations#create  |

これをログインに必要な情報だけ残すようにします。

|Prefix  |Verb  |URI Pattern  |Controller#Action  |
|---|---|---|---|
|new_user_session  |GET  |/users/sign_in(.:format)   |devise/sessions#new  |
|user_session  |POST  |/users/sign_in(.:format)  |devise/sessions#create  |
|destroy_user_session  |DELETE  |/users/sign_out(.:format)  |devise/sessions#destroy  |

それにはroutes.rbを編集していきます。

変更前

devise_for :users

変更後

devise_scope :user do
  get '/users/sign_in' => 'devise/sessions#new', as: :new_user_session
  post '/users/sign_in' => 'devise/sessions#create', as: :user_session
  delete '/users/sign_out' => 'devise/sessions#destroy', as: :destroy_user_session
end

この部分で、Deviseのマッピングを行い、skipしてルーティングの設定は行わないようにしています。 devise_for :users, skip: :all

do以下で必要なルーティングだけ記述してあげれば完成です。

一点注意が必要になります。おそらくログアウト時にルーティングエラーが出ると思います。 これは、本来Deleteメソッドで呼ぶはずが、Getメソッドで呼んでしまっているのが原因です。 そこで、ログアウトのリンクを変更してあげます。具体的にはlink_toからbutton_toに変更する必要があります。

変更前

<%= link_to "ログアウト", destroy_user_session_path, method: :delete %>

変更後

<%= button_to "ログアウト", destroy_user_session_path, method: :delete, class: "nav-link waves-effect" %>

Unityの最新版をDLしたらAndroidビルドが出来なくなった

ビルドしようとするとUnable to list target platforms. Please make sure the android sdk path is correct. ... というメッセージが出てきて止まる

↓こんな感じ

f:id:front-end-engineer:20170531185132p:plain

まず、疑ったのがSDKのパスだがそこは問題なかった。

AndroidStudioを起動して確認済み

※確認方法

Configure>Project Default>Project Structure>Android SDK location:

同じような問題にぶつかっている人が解決方法を提示していてくれた

一部個人的に危惧していたのが、toolsフォルダを上書きしてしまうのは少し危険だと思ったので、自分はリネームしてtools_r25.2.5-windows.zipの中のtoolsを新規のものとして配置した。

いきなりビルドできなくなると焦るけれども、unityのフォーラムが優秀なので、そちらを参照すると解決する可能性が高い

answers.unity3d.com

UbuntuでChromeのインストールでハマったこと

Linuxをはじめて躓いたこと

Ubuntuだとデフォルトで、FireFoxが入ってはいるんですが、Chromeを今まで使ってきたので、今まで同じようにインストールしようとしたらできないという、まさかの事態に突入しました

WindowsMacだとChromeインストーラをDLして、「次へ(next)」をクリックして行けば終わるんですが、Ubuntuだと「インストール中」から進まずに、結果インストールできないという事態に陥ったので、Chromeのインストールまでにやったことをまとめます

1、依存するパッケージをインストール

自分はこれを行っていなかったために入りませんでした

「libappindicator1」が必要なパッケージです
sudo apt-get install libappindicator1
これで前準備が完了です

エラーが出る場合には、Chromeが中途半端に入っているかもしれないので、削除します
sudo apt-get remove google-chrome-stable

2、Chromeインストーラをダウンロード

公式サイトからインストーラをダウンロード
https://www.google.co.jp/chrome/browser/desktop/

3、インストール

2でDLしたディレクトリに移動してコマンドを実行。
sudo dpkg -i ダウンロードしたインストーラ名.deb
エラーがでなければ完了

続けて
google-chrome
を入力すれば起動します

SlideShareにアップしたら文字が消えた

keynoteで作成したスライドのテキストがSlideShare上で消える

結論から言うとフォントの種類の問題だった
macにデフォルトで入っているヒラギノフォントを使っていたから表示できていなかった

対処法

1、keynote上ではスライドを作成せずに、画像として切り出したものを使用する
2、使用してもいいフォントを使う(把握仕切れていない)

フォントにこだわりがある人は1を使用するしかない。フォントにこだわりがない人は、下のURLからmigmix-1p-20150712.zipを選んで自分のPCにインストールすれば問題ない(自分はこれで対応した)
https://ja.osdn.net/projects/mix-mplus-ipa/releases/

ローカルサーバを他のPCで確認(共有)するには?

ローカルサーバの立て方

ローカルサーバを立てるには、xamppを使ったりといった方法があるが、
今回はコマンドとphpを使って行う。
rubyでもpythonでも可能

ビルドインサーバの使用

ビルドインサーバを使用するには、phpのバージョンが5.4.0以上が必要になる。
ターミナルもしくはコマンドプロンプトで下記のコマンドを打ってみて、バージョンが古い場合にはアップデートしてください。

$ php -v

phpインストール方法

windows
mac

インストールが完了したら、下記のコマンドを実行してサーバが立ち上がるか試してみましょう
下記のようになったら、http://localhost:8000にアクセスして、表示できたら成功です。

$ php -S localhost:8000
PHP 7.0.12 Development Server started at Mon Feb  6 18:39:08 2017
Listening on http://localhost:8000
Document root is /Users/xxxxxx/Desktop/xxxxxx
Press Ctrl-C to quit.

他の人にも共有する

localhostのままでは共有できないので、IPv4アドレスを使用します。
windowsの方はコマンドでipconfigとすると
f:id:front-end-engineer:20170206184442p:plain
のような画面が出てきます。使うのはIPv4アドレスと書かれている数値の部分です(xxx.xxx.xx.xxx)
macの方は、スタートメニュー → システム環境設定 → ネットワーク → Wi-Fi
の中にあるコンテンツ部分に記載されているIPアドレスを使用します。
先ほど、localhostと書いた部分をIPアドレスに置き換えます。
※サーバを止めるには、Ctrl + c で止まります

$ php -S 192.168.1.181:8000
PHP 7.0.12 Development Server started at Mon Feb  6 18:52:17 2017
Listening on http://192.168.1.181:8000
Document root is /Users/xxxxxx/Desktop/xxxxxx
Press Ctrl-C to quit.

複数人でアクセス

Listening on http://192.168.1.181:8000
となっているURLにアクセスしてみて無事にアクセスできたら別の端末でも同じURLにアクセスしてみてください。
複数人でローカルサーバが見えるはずです。
※同じwifiもしくはルータをお使いください。そうしないとIPアドレスが合致しないためwebページが見れません(ローカルサーバを立てた人のみしか見れない)。