日報(2014/10/31)
12:00 - 14:00
14:00 - 15:00
16:00 - 18:00
- サービスに画像アップロード用のgemと機能を追加
- ついでに記事を書く
18:00 - 23:30
感想&課題
- アウトプットは、常に意識しておきたい(コードの書く、記事を書く,つぶやくなど)
- 書籍がたりない。DNSの設定とNginxの設定が、ネットで調べるだけだと体系的に頭に入れられないので辛い。
- 借りた本も読み進めたいなぁ。
Nginxの設定
こんにちは。kikeda1104です。 前回の記事で、Nginxのディレクティブの一覧を作りました。それを参考にしながら公開する目的で、 Nginxの設定を進めていきたいと思います。
システムの前提
Nginx
server { listen 80 default deferred; client_max_body_size 4G; server_name example.com; keepalive_timeout 5; upstream app_server { server unix:/tmp/unicorn.sock fail_timeout=0; } location / { root /myapp/public; } error_page 404 /404.html; location = /404.html { root /usr/share/nginx/html; } }
参考:
unicorn/nginx.conf at master · defunkt/unicorn · GitHub
https://github.com/defunkt/unicorn/blob/master/examples/nginx.conf
以上。
rmagickのインストール(Cent OS 6.5)
こんにちは。kikeda1104です。 rmagickのインストールで、必要なライブラリが足りずにコンパイルエラーになっていたので、 調べて対応しました。
環境
- Cent OS(6.5)
必要なlibのインストール
$ yum -y install libjpeg-devel libpng-devel $ yum -y install ImageMagick ImageMagick-devel
rmagickのインストール
$ gem install rmagick
以上です。
Capybara-webkitの導入(Cent OS 6.5)
こんにちは。kikeda1104です。 スクレイピングで、JSがrenderするDOMを触る必要があったので、CapybaraとCapybara-webkitをインストールしました。
環境
- Cent OS 6.5
まず、インストールする上でqtが必要になるので、これをインストールします。
Qtのダウンロード&インストール
最新版は、現在(2014/10/30)5.3系ですが、Capybara-webkitのWikiを確認すると4.8を使っています。
$ cd ~/Downloads $ wget http://download.qt-project.org/official_releases/qt/4.8/4.8.6/qt-everywhere-opensource-src-4.8.6.tar.gz $ tar xzvf qt-everywhere-opensource-src-4.8.6.tar.gz $ cd qt-everywhere-opensource-src-4.8.6 $ ./configure $ gmake $ sudo gmake install $ sudo ln -s /usr/local/Trolltech/Qt-4.8.6/bin/qmake /usr/bin/qmake
capybara-webkitをインストール
$ gem install capybara-webkit Fetching: capybara-webkit-1.3.1.gem (100%) Building native extensions. This could take a while... Successfully installed capybara-webkit-1.3.1 Parsing documentation for capybara-webkit-1.3.1 Installing ri documentation for capybara-webkit-1.3.1 Done installing documentation for capybara-webkit after 0 seconds 1 gem installed
参考
https://github.com/thoughtbot/capybara-webkit/wiki/Installing-Qt-and-compiling-capybara-webkit
ActiveRecordを利用する(Ruby)
kikeda1104です。 スクレピングした内容をDBに保存する際になどに、ActiveRecordを利用することで簡易に操作することができるので、利用してみました。
ActiveRecord
Railsの標準の添付されており、MVCのM(odel)の概念を実現しているライブラリです。
ActiveRecordのインストール
$ gem install activerecord
コード
require 'active_record' # 接続先の環境設定の情報を定義する。 ActiveRecord::Base.establish_connection( adapter: "mysql2", host: "localhost", username: "root", password: "hoge", database: "hoge" ) # テーブルを名を指定する class Company < ActiveRecord::Base self.table_name = "companies" end Company.all
設定情報のYAMLへの切り出すこともできますが、ひとまずこれで動きますね。 以上です。
参考
capybara-webkitのインストール
こんにちは。kikeda1104です。
nokogiriと利用して、スクレイピングをしようと思いましたが、jsによるrenderが発生しているサイトだったので、gem capybaraとcapybara-webkitのインストールをします。インストール最中につまづきがあったので、備忘録として書いています。
前提
capybaraのインストール
$ gem install capybara
capybara-webkitのインストール
$ gem install capybara-webkit
上記のエラーメッセージが出力されますので、Qtというアプリケーション・ユーザインタフェース (UI) フレームワークをインストールすることで、改善されます。
Qtのインストール
$ brew insatll qt
capybara-webkitの再インストール
$ gem install capybara-webkit
参考
MacにCapybara-webkitをインストール - 僕の車輪の再発明
以上です。
nokogiriのインストール
こんにちは。睡眠のリズムを崩しているkikeda1104です。 とはいえ、眠い眠いと思いながら作業することがないので快適に作業を進められてます。
環境
nokogiriのインストール
事前準備
$ brew update $ brew upgrade $ brew install libxml2 libxslt libiconv $ brew link --force libxml2 $ brew link --force libxslt
※ brewのupgrade中に「Agreeing to the Xcode/iOS license requires admin privileges, please re-run as root via sudo.」というエラーメッセージが出力されたら、xcodeを立ち上げて、ライセンスを承諾しておく。
nokogiriのインストール
$ gem install nokogiri -- --use-system-libraries --with-iconv-dir="$(brew --prefix libiconv)" --with-xml2-config="$(brew --prefix libxml2)/bin/xml2-config" --with-xslt-config="$(brew --prefix libxslt)/bin/xslt-config"
以上です。
参考
gem omniauth(-twitter)
最近kindleかpadが欲しいkikeda1104です。書籍が重いです。 今回は、deviseで認証機能を開発していましたが、やや多機能すぎたので、これをomniauthのgemに切り替えました。twitterのアカウントを利用したかったのでomniauth-twitterもGemfileに入れています。
gem omniauthの導入
Gemfileにgemを追加
$ cd rails_app $ vim Gemfile
# Gemfile ... gem 'omniauth' gem 'omniauth-twitter'
bundle
$ bundle install
Twitter Application Managementにappを登録
Twitter Developersにアカウントを作成していただいてから、 Twitter Application Managementにアクセスします。
「Create App new」ボタンを押します。
Applicationの情報を入力
Name、description、WebSite、Callback URLを入力します。
こんな感じですね。
Twitter Application ManagementでApplicationの作成が終わると、「Key and Access Token」というタブがあるので、クリックして「Consumer Key (API Key)」と「Consumer Secret (API Secret)」をコピーしておく。 (開いておいてください)
config/initializeに追加
$ vim config/initialize/omniauth.rb
Rails.application.config.middleware.use OmniAuth::Builder do provider :twitter, "api_key", "access_token" # ここに先ほどコピーしたもしくは開いておいたKeyとAccess Tokenを入力します。 end
コーディング
helperを追加
application_controller.rb
helper_method :logged_in? private def logged_in? !!session[:user_id] end
viewにコードを追加
application.html.hamlかheaderとなるhtmlに記述します。
... %li - if logged_in? = link_to 'ログアウト', logout_path - else = link_to 'twitterログイン', '/auth/twitter'
controller追加
sessions_controller.rbを作成します。
$ rails g controller sessions $ vi app/controller/sessions_controller.rb
class SessionsController < ApplicationController def create user = User.create_from_auth_hash(request.env['omniauth.auth']) session[:user_id] = user.id redirect_to root_path, notice: 'ログインしました' end def destroy reset_session redirect_to root_path, notice: 'ログアウトしました' end end
route追加
ルーティングを追加します。
get '/auth/:provider/callback' => 'sessions#create' get '/logout' => 'sessions#destroy', as: :logout
参考書籍:
以上です。
route.rb(namespace, member) (Rails 4.x)
Railsは、DSLが豊富ですので、覚えるのは大変ですね。 routesで使われるDSLの一部を紹介したいと思います。
routes.rb
URLから実行するControllerのactionとのひも付けを表すファイルです。
namespace
informationコントローラのroutingを書く際に、information/welcome
など名前空間を利用したい場合に利用します。
コントローラ名を利用していますが、もちろんそんなことをせずに、URLを設計できます。
namespace :information do get 'welcome' end # => information_welcome GET /information/welcome(.:format) information#welcome
member
memberは、information/:id
のように使われます。サンプルコードを書くと。
resources :information do member do get 'welcome' end end # => welcome_information GET /information/:id/welcome(.:format) information#welcome
上記のように書きますね。
Rails tutorial、Rails Guideは目を通しておいて、tutorialのアプリを作ってみることをお勧めします。
参考
Rails Routing from the Outside In — Ruby on Rails Guides
以上です。
module, class(Ruby)
こんにちは。kikeda1104です。 ファイル別にコードを切り出して、必要なモジュールやクラスでひとまとめに呼び出すのは、 割とgithubなどで公開されているコードでは一般的だと思います。
自分の頭の整理もかねて、moduleとclassの知識の整理とやりたいこと書いていきたいと思います。
Rubyにおけるmoduleとclass
Moduleとは
モジュール (Module)とは、工学などにおける設計上の概念で、システムを構成する要素となるもの。いくつかの部品的機能を集め、まとまりのある機能を持った部品のこと。
Classとは
クラス(class)は、クラスベースのオブジェクト指向においてオブジェクトの設計図にあたるもの。抽象データ型の一つ。
ModuleとClassの違い
モジュールとクラス モジュールとクラスの違いは以下の通りである。 クラスにはインスタンスとしてオブジェクトを生成する機能がある。 クラスは他のクラスの動作やデータを継承することができる。 ポリモーフィズムにより、クラスのインスタンス間の関係は実行時に変化するが、モジュール間の関係は静的である。 モジュールとクラスの類似点は以下の通りである。 どちらも実装の詳細を外部から隠蔽する。 どちらも階層(モジュール階層とクラス階層)を形成することができる。
Rubyだと、モジュール階層が同じであれば、ファイルとして切り出して、呼び出した際にも 同一のmoduleとして見てくれます。
ソースファイルを分けたい
やりたいことは、ソースファイルを分けたいんですよね。 ファイル内で、ソース分けることでも、見やすくなりますが、ファイルを分けることで、ファイル名でも判別できますから、尚良い(・∀・)
# file01.rb module Hoge def fuga puts "fuga" end end # file02.rb module Hoge class Connection end end # file03.rb require 'hoge/file01.rb' require 'hoge/file02.rb' module Hoge end
上記みたいに記述することで、module名をname spaceとして利用することができますね。
ファイルを切り分けたいスクリプト(Gem)
Railsアプリのlibにあった機能を、gem化することにしたのが理由で開発しています。
ディレクトリの構成
結果
実は、gemのファイルの切り出しがなかなか考えられずにいましたが、できると早いもので。
Connection.new.get
みたいに使いたかったので、これをリクエストは,request.rb
ファイルにまとめていましたが、
class Connection
にまとめる形にして呼び出していますね。
参考
kikeda1104/recruit_api · GitHub
書きながら調べていく事で問題が解決できたので、うまくまとめられました。 gemはまだ、開発中なので、Rubygemsに公開もしていないですが、後日、多分すると思います。
※ファイルの切り出しとか、コードの書き方で、意見があれば教えていただけると助かります。