TL;DR Devise Securityを使うことで、過去に使用されたパスワードの制限や多重ログイン禁止などのエンタープライズ向けのセキュアな機能を提供できる。 はじめに RailsでWebアプリを作成する際、Deviseを使って、ユーザ管理を行うことが多いと思います。 Deviseはかなり便利なgemですが、過去に使用されたパスワードの制限や多重ログイン禁止などのエンタープライズ用のセキュリティ要件までは取り扱っていません。 そこで今回はDeviseの使用を前提として、さらにDevise Securityを使用して、よりセキュアなRailsアプリを構築します。 Devise Securityについて Devise Securityは、Deviseの拡張で、下に挙げるような機能を追加します。 ちなみに、開発が止まってしまったDevise Security Extensionから公式にfo
課題 例えば、'/csv/download'というリンクからCSVファイルをダウンロードさせるために、以下のようなコードをコントローラに書いたとします。 ブラウザにてリンクをクリックすると、(期待する動作は「CSVファイルがダウンロードされる」ですが)CSVファイルがブラウザで自動的に開かれ、内容が表示されてしまいます。 解決方法 リンクを'/csv/download.csv'と拡張子付きにする。 もっといい方法がありそうですが、見つけ切れませんでした。もしご存知の方がいればコメントで教えてください。(>_<) 前提 まず前提として、上記サンプルコードでは make_csv_file という関数で正常なCSVファイルへのパスを返しているものとします。 レスポンスヘッダを確認すると、
初めまして 今日から自身のprogrammingの日記をつけようと思います。 今日学んだこと 今日はprogateのRuby On Rails学習コースをしました。 変数session... getとpost applicationコントローラー to_iメソッド 変数session ページを移動してもユーザー情報を保持し続けるために、sessionという特殊な変数を用います。sessionに代入された値は、ブラウザ(InternetExplorer, GoogleChrome等)に保存されます。sessionに値を代入すると、ブラウザはそれ以降のアクセスでsessionの値をRailsに送信します。 getとpost get : データベースを変更しない場合 post : データベースを変更する場合、sessionの値を変更する場合 applicationコントローラー applicat
個人的に、Rails界隈でよくチェックしているサイトをまとめておきます。 プラグイン The Ruby Toolbox プラグインの情報を探す時は、大概ココから入ります。プラグインに関するドキュメント、スクリーンキャスト、ブログエントリー等を、皆でプラグインに紐付けられるようになっているので便利です。また、そのプラグインがどのくらい人気があるのか視覚的に分かるようになっているので、最近急に人気が出ているプラグインとか発見出来たりします。単純にブラブラと徘徊していても楽しいサイトです。 技術情報/チュートリアル Ruby5 海外の有名な企業Envy Labsが情報を掲載しているサイトです。主に、RubyやRails界隈の最新情報、トピックス等を1週間置きくらいに更新しています。 Coding Edge @ITで取り上げられているカテゴリ。情報量は少なめです。 Ruby on Rails Tu
RailsAdminは、簡単に、キレイな、扱いやすい管理画面を提供してくれるRailsエンジンです。 リソース Demo GitHub RubyGems.org The Ruby Toolbox インストール RailsAdminは、管理画面にアクセスする管理者の管理にDeviseを利用しています。 その為、まずは、Deviseをインストールしておきましょう。 Gemfileに、deviseを追記します。 $ bundle install $ rails g devise:install create config/initializers/devise.rb create config/locales/devise.en.yml ===============================================================================
Rails 4.0.0がリリースされたので今参加しているプロジェクトのアプリのアップデートが出来るかを試してみました。 やってみた結果としては、2.3 -> 3.0や、3.0 -> 3.1に比べると大分楽にバージョンアップできる感じです。 たまたま今のプロジェクトで引っかかった問題について、メモがてらまとめておきます。 rake rails:update diffを見ながらconfigファイルを書き換える。 そんなに大きな変更は無い。 rails4からはinitializerに色々移せって感じで、application.rbが軽量化されてるけど、元のままでも別に問題無い。 設定項目の重複だけ注意。 strong_parameters 元々、gemで先行導入して取り入れていたので概ね問題無く移行できました。 attr_accesibleを利用したセキュリティ対策は、外部のgemに分離されてい
Ubuntu 13.04 Nginx 1.5.4 Ruby 2.0.0p247 Ruby on Rails 4.0.0 最新のNginxを入れる cd ~ Nginxの鍵をダウンロードし追加する wget http://nginx.org/keys/nginx_signing.key sudo apt-key add nginx_signing.key /etc/apt/sources.listに以下の2行を追加する deb http://nginx.org/packages/mainline/ubuntu/ raring nginx deb-src http://nginx.org/packages/mainline/ubuntu/ raring nginx apt-getを更新 sudo apt-get update Nginxをインストール sudo apt-get install
Rails で非同期処理といえば、 Sidekiq, Resque, DelayedJob あたりが有名かと思います。 DelayedJob は RDS をジョブキューとして利用できる1ため、インフラの準備が不要で比較的ライトに導入できますが、数万件のジョブを登録しようと思うと RDS にかなりの負荷がかかりますし、Insert もそれほど早くないため、ジョブキューとしてはあまり適しているとは言えません。 Redis などのインメモリーデータベースを用いれば、RDS に負荷をかけず、Insert の高速化も見込めますが、万が一 Redis がクラッシュした際には登録されていたキューは全て無くなりますし、そういった障害に対応するためには幾らかの運用コストが発生します。 ところで、 AWS には SQS というキューイングサービスが提供されています。 安価で堅牢な造りになっており、運用コストも
Rails というか ActiveRecord で has_many through なモデルをさわっていてハマった事象があったので書きます。ただ、ハマりを回避する方法は分かっても、なぜそのような挙動になるかはまだ分かっていません。誰か教えてもらえると助かります。 前提 Rails 5.x ActiveRecord モデル class User < ApplicationRecord has_many :articles has_many :game_users has_many :games, through: :game_users belongs_to :pinned_article, class_name: 'Article' end class Article < ApplicationRecord belongs_to :user end class Game < Applic
ついにRails 4がリリースされたので軽く触ってみたら、3.xから変わったところを見つけたので共有。まだ日本語の情報は見当たらなかった。 APIを試しに作ってみようと思いcurlでPOSTリクエストを送ろうとしたら以下のようなエラーが。 $ curl -X POST -d "name='hoge'" http://localhost:3000/bikes Can't verify CSRF token authenticity Completed 422 Unprocessable Entity in 1ms ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken): ...
ローカルタイムに関する設定 Rails3系からデータベースにはUTCで保存、取り出して扱う際に必要なタイムゾーンに変更するというのが基本的な考え方の様子。 タイムゾーンの設定はapplication.rbにて行えるが、主に関係する設定が2つある。 config.active_record.default_timezone config.time_zone config.active_record.default_timezone データベースに保存する際のタイムゾーンを指定するディレクティブ。先ほど書いたようにRails3からはデータベースに時刻を保存する場合は基本的にUTCで保存するようになったみたいで、これをローカルタイムで保存するには以下のように設定すれば良い。
Rails Advent Calendar 6日目。 Railsで普段使うようなGemも、Rails2系から3系への移行で大分デファクトのGemなども入れ替わったり、新しいGemが台頭して来たり、RailsやRubyを使う上では切っても切れないGem達。 なので、現在、主に自分が使用しているGemの一覧を紹介します。 普段Railsを使っている人にはあまり目新しいものは無いと思いますが、これからRailsを始める人がとりあえず知っておくと良いかも、みたいな観点でピックアップしてみました。 ※2012/09/06時点 Rails3.2.8対応 DBアダプタ sqlite3 pg mysql2 おなじみ。各種DB用アダプタ。Railsデフォルトはsqlite3。 ログイン認証 omniauth omniauth-twitter omniauth-facebook omniauth-github
Ruby on Rails Advent Calendar 12日目。 Rails開発で有用な便利Gem一覧 - Qiita [キータ] ↑去年のAdventCalendarで書いた上記の記事の2013年版です。 去年と比べるとRails3系で使っていたGemが順当にRails4に対応して、継続して使っている印象です。 ※2013/12/12時点 DBアダプタ sqlite3 pg mysql2 定番。Rails4になってもおなじみ。 ログイン認証 omniauth omniauth-twitter omniauth-facebook omniauth-github omniauth-identity ↓自作したomniauth用のscaffoldを作るGemに組み込んで使っています。 shu0115/minimum-omniauth-scaffold 定数/設定値管理 rails_con
Ruby on RailsでDev環境は使ったことあるけど、test・prod環境を考慮した環境構築をしたことがない人にお勧めの内容です。 サーバー構成図 サーバーの役割 リバースプロキシサーバー(ホスト名:rp01) ロードバランサ機能を使ってWEBサーバ二台に処理を振り分け、アクセスを1台のサーバーに集中させない WEBサーバーを外部から隠せることでセキュリティ面の向上 WEBサーバー(web01、web02) webサーバーを2台用意することでアクセスが1つのサーバーに集中しないため、レスポンスを早くできる マスターDBサーバー(db01m) DB内容をもう1台のDBサーバー(スレーブ)へリアルタイムにコピーし、障害でマスターが停止したときはスレーブに切り替える スレーブDBサーバー(db01s) 読み込み専用のサーバー。書き込みをしない分レスポンスが早くなる マスターの内容を常にコ
I18n、使ってますか? 多言語化しなくても、アプリケーション内で文言を統一するなどの用途で使用している方も多いのではないかと思います。 一見、YAMLを書いて、viewやcontrollerで参照するぐらいの単純な機能に見えますが、実はかなりたくさんの便利機能があるので、まとめてみました。 日付や時刻のフォーマットを定義する 普段よく使うのはI18n#tだけど、日付や時刻をローカライズするI18n#lもある。 ja: date: formats: default: "%Y/%m/%d" long: "%Y年%m月%d日(%a)" short: "%m/%d" time: formats: default: "%Y/%m/%d %H:%M:%S" long: "%Y年%m月%d日(%a) %H時%M分%S秒 %z" short: "%y/%m/%d %H:%M" > I18n.l(Date
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く