Monthly Archives: 7月 2014

RailsアプリケーションをBitbucketで管理できるように設定する

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

通常のgitによるソースコード管理そのものですので難しいことは何もありませんが、Rails+Bitbucket環境の例として書き留めておきます。

■前提条件

・新規にRailsアプリケーションを作成
・当該アプリでは一度もGit管理していない
・Bitbucketアカウントは取得済み
・SSH公開鍵は新規作成

■手順

(1) Bitbucketにリポジトリを作成

Dashboardのメニュー[作成]を押下し、[新規リポジトリの作成]画面にて必要事項を入力し、[リポジトリの作成]ボタンを押下します。なお、リポジトリタイプはGit(デフォルト)、プログラミング言語はRubyを選択します。その他項目は必要に応じて入力、選択してください。

 

(2) gitの初期化

当該Railsアプリのディレクトリに遷移し、gitの初期化を行います。

$ cd **********
$ git init
Initialized empty Git repository in /********/********/**********/.git/

 

(3) .gitignoreの編集

git管理対象から外したいファイルを指定するために.gitignoreを編集します。デフォルトで生成されているはずですが、もし存在しない場合は新規作成になります。

$ vi .gitignore

今回は以下を追記しますが、必要に応じて追加編集削除してください。

*.swp
*~
.DS_Store
# See https://help.github.com/articles/ignoring-files for more about ignoring files.
#
# If you find yourself ignoring temporary files generated by your text editor
# or operating system, you probably want to add a global ignore instead:
#   git config --global core.excludesfile '~/.gitignore_global'

# Ignore bundler config.
/.bundle

# Ignore the default SQLite database.
/db/*.sqlite3
/db/*.sqlite3-journal

# Ignore all logfiles and tempfiles.
/log/*.log
/tmp

*.swp
*~
.DS_Store

よくわからなければ、githubが公開しているRails用.gitignoreを流用してもOKです。
https://github.com/github/gitignore/blob/master/Rails.gitignore

 

(4) ファイルの追加とローカルでのコミット

$ git add .
$ git commit -m "initial commit"
[master (root-commit) b2060f1] Initial commit
 Committer: ****** <******@*****************.******>
Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly:

    git config --global user.name "Your Name"
    git config --global user.email you@example.com

If the identity used for this commit is wrong, you can fix it with:

    git commit --amend --author='Your Name <you@example.com>'

 5314 files changed, 640951 insertions(+), 0 deletions(-)
 create mode 100644 .gitignore
・・・・
・・・・

 

(5) SSHキーを生成

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/*******/***********/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /*******/***********/.ssh/id_rsa.
Your public key has been saved in /*******/***********/.ssh/id_rsa.pub.
The key fingerprint is:
******************************************* *********@***************************.******
The key's randomart image is:
+--[ RSA 2048]----+
|            ******** |
|             ******.|
|          *******|
|         . **** |
|        ****  ***** .  |
|           . *******. |
|            *******.  |
|           . .   |
|            .    |
+-----------------+

なお、

Enter file in which to save the key (/*******/***********/.ssh/id_rsa):

は、空Enterで

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

では、パスフレーズを入力してください。

生成されたキーは ~/.ssh/ 配下に格納されますので、秘密鍵(id_rsa)のパーミッションを変更しておきます。

$ chmod 600 id_rsa

 

(6) SSH公開鍵をBitbucketに登録

Bitbucketにて[アカウントの管理]を選択し管理画面に遷移したら、左下の[SECURITY]欄のSSH キーを選択します。

[鍵を追加]ボタンを押下します。

[SSH 鍵を追加]のポップアップが表示されますので、Key欄に公開鍵の中身を貼り付けて、[鍵を追加]ボタンを押下します。

$ cat ~/.ssh/id_rsa.pub
ssh-rsa **********************************
*******************************
***********************************
**********************== ********@************.******

ssh-rsaではじまる上記内容をすべてコピペです。

なお、Label欄が任意入力になっていますが、名前をつけておかないとわからなくなりますので入力をおすすめします。

 

(7) 上記(1)で作成したリモートリポジトリを指定してBitbucketへファイルをPushする

$ git remote add origin git@bitbucket.org:*****/****************.git
$ git push origin master
The authenticity of host 'bitbucket.org (131.103.20.168)' can't be established.
RSA key fingerprint is *****************************************.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'bitbucket.org,131.103.20.168' (RSA) to the list of known hosts.
Enter passphrase for key '*******************/.ssh/id_rsa':
Counting objects: 6171, done.
Compressing objects: 100% (5671/5671), done.
Writing objects: 100% (6171/6171), 35.73 MiB | 2.94 MiB/s, done.
Total 6171 (delta 740), reused 0 (delta 0)
To git@bitbucket.org:*****/****************.git
 * [new branch]      master -> master

なお、

Are you sure you want to continue connecting (yes/no)?

は、yesで応答します。

これでOKです。

 


PivotalTrackerでプロジェクトを削除する方法

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

気がつくとUIが変わっていて、その度にわからなくなるので記録しておきます。2014.7.23現在の方法です。

(1) Dashboardにて当該プロジェクトの上にフォーカスを乗せてoverviewをクリック

(2) 左下Actions欄のDeleteをクリック

(3) 確認ダイアログでOKを押下


iOS端末の言語(公用語)設定とiTunesConnectでの言語設定の関係

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

iTunesConnectにてアプリを申請する際にデフォルト言語を選択し、ローカライズの有無を設定していると思いますが、ユーザの端末における言語設定との関係を書いておきます。

「ユーザの端末がそのユーザの公用語(母国語)に設定されている」という条件になりますが、

■プライマリを「English」、ローカライズ言語として「Japanese」を設定

 日本=日本語の説明
 その他の国=英語の説明

■プライマリを「Japanese」、ローカライズ言語として「English」を設定

 英語圏=英語の説明
 それ以外の国=日本語

になります。

後者の設定だと英語圏以外の人には日本語で表示されてしまう可能性があるということです。また、プライマリ、ローカライズともにXcodeおよびソース側でそれに対応した作り(ローカライゼーション)にしていないと、iTunesConnect設定が正しくても意図した言語で表示されませんので注意です。


iOSアプリを公開停止にする方法

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

公開停止は以下の手順で可能です。

(1) iTunes Connectにログイン
(2) Manage Your Appsで非公開にしたいアプリを選択
(3) Rights and Pricingを選択
(4) specific territoriesを選択
(5) 公開停止にしたい配信国のチェックボックスをオフにする
 →アプリそのものを公開停止にする場合はすべての国にオフに
(6) 右下のSaveボタンを押下
(7) アプリのステータスがDeveloper Removed From Saleに遷移

これでOKです。数時間にAppStoreからアプリが消えます。


Apache+Passenger+MongoDBで “No sessions configuration provided.”

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

PassengerとMongoDBを使用する際、以下のようなエラーになることがあります。

Problem:
  No sessions configuration provided.
Summary:
  Mongoid's configuration requires that you provide details about each session that can be     connected to, and requires in the sessions config at least 1 default session to exist.
Resolution:
  Double check your mongoid.yml to make sure that you have a top-level sessions key with at least      1 default session configuration for it. You can regenerate a new mongoid.yml for assistance via     `rails g mongoid:config`. 

mongoid.ymlにproductionの記述がないからです。自動生成されたmongoid.ymlにはdevelopmentとtestの記述はありますが、productionの記述がありません。Passengerがproductionの参照を求めていますので、productionの記述が必要です。

$ vi config/mongoid.yml
#  mongoid.yml
production:
  sessions:
    default:
      database: myapp_production
      hosts:
        - localhost:27017

これで正常に動作するはずです。

 


CentOS6.2にMongoDBをインストールしてRailsで使う

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

■前提条件

・CentOS release 6.2 (Final)
・Ruby 2.1.2
・Rails 4.1.2
・Passenger 4.0.45
 

■手順

(1)リポジトリを追加します。

# vi /etc/yum.repos.d/mongodb.repo
[mongodb]
name=MongoDB Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/
gpgcheck=0
enabled=1

ここで重要なのはbaseurlの後端で、OSが32bitの場合はi686、64bitの場合はx86_64となります。32bitか64bitかは以下のコマンドで確認できます。

# uname -a

 

(2)MongoDBをインストールします。

# yum install  mongodb-org mongodb-server

これでインストールはできましたが、念のための起動確認と自動起動を設定します。
 
(3)MongDBを起動します。

# service mongod start

 
(4)自動起動を設定します。

# chkconfig mongod on

このままRailsアプリケーションを開発する場合は以下を実行します。
 
(5)Railsアプリケーションを生成します。

$ rails new mongo_sample --skip-bundle --skip-active-record

ActiveRecordを除外するために–skip-active-recordを指定しています。
 
(6)Gemfileを編集します。

$ vi Gemfile

以下を追記します。

gem 'mongoid', git: 'https://github.com/mongoid/mongoid.git'
gem 'bson_ext'


 
(7)bundle install

$ bundle install --path vendor/bundle

 

(8)mongoidを初期化します。

$ rails g mongoid:config
      create  config/mongoid.yml

これで準備が整いました。
 


MongoDBへCSV(カンマ区切り)形式のデータをインポートする

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

CSVには以下のようなデータが入っている状態とします。

$ cat import.csv 
name,address
"晴海","東京都中央区"
"芝浦","東京都港区"
"油壺","神奈川県三浦市"

このデータをデータベース名fd、コレクション名portでインポートすることにします。

 

(1)インポートを実行します。

$ mongoimport -db fd --collection port --type csv --file import.csv --headerline
connected to: 127.0.0.1
2014-07-12T00:02:27.645+0900 imported 3 objects

ちなみに、ここで使用しているオプションはそれぞれ

--db DB名
--collection コレクション名
--type 入力ファイル形式
--file 入力ファイル名
--headerline ヘッダ行の無視

となります。

 

(2)正しくインポートされたかどうか確認します。

> use fd
switched to db fd
> db.port.find()
{ "_id" : ObjectId("53bffc837720f64a40924339"), "name" : "晴海", "address" : "東京都中央区" }
{ "_id" : ObjectId("53bffc837720f64a4092433a"), "name" : "芝浦", "address" : "東京都港区" }
{ "_id" : ObjectId("53bffc837720f64a4092433b"), "name" : "油壺", "address" : "神奈川県三浦市" }

正常にインポートされました。
 


MongoDBからCSV(カンマ区切り)形式でデータをエクスポートする

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

以下のようなデータが入っている状態とします。

> use fd
switched to db fd
> db.port.find()
{ "_id" : ObjectId("53bff46a777b379a6036e310"), "name" : "晴海", "address" : "東京都中央区" }
{ "_id" : ObjectId("53bff46a777b379a6036e311"), "name" : "芝浦", "address" : "東京都港区" }
{ "_id" : ObjectId("53bff46a777b379a6036e312"), "name" : "油壺", "address" : "神奈川県三浦市" }

 

(1)エクスポートを実行します。

$ mongoexport --db fd --csv --collection port --out export.csv --fields _id,name,address
connected to: 127.0.0.1
exported 3 records

 

ちなみに、ここで使用しているオプションはそれぞれ

--db DB名
--csv CSV出力
--collection コレクション名
--out 出力ファイル名
--fields フィールド名

となります。

 

(2)正しくエクスポートされたかどうか確認します。

$ cat export.csv 
_id,name,address
ObjectID(53bff46a777b379a6036e310),"晴海","東京都中央区"
ObjectID(53bff46a777b379a6036e311),"芝浦","東京都港区"
ObjectID(53bff46a777b379a6036e312),"油壺","神奈川県三浦市"

正常にエクスポートされました。
 


RailsアプリにWebAPIを実装するためGrapeを導入する

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

■前提条件

データベースには以下のようなデータが入っている状態とします。

sqlite> select *  from ports;
1|晴海|東京都中央区|2014-07-10 23:53:32.503217|2014-07-10 23:53:32.503217
2|芝浦|東京都港区|2014-07-10 23:54:47.742586|2014-07-10 23:54:47.742586
3|油壺|神奈川県三浦市|2014-07-10 23:55:35.659253|2014-07-10 23:55:35.659253
sqlite>

idを指定して当該レコードを取得するため、以下のようなURLで呼び出せるようにします。

http://サーバ名/api/v1/ports/1

 

■手順

(1)grapeとjbuilderをインストールします。

$ vi Gemfile
gem 'grape'
gem 'grape-jbuilder'
$ bundle install

 

(2)APIを記述します。

app/にapiディレクトリを作成し、その中にapi.rbという名前でファイル作成します。

# app/api/api.rb
class API < Grape::API
  format :json
  default_format :json
  prefix "api"
  version "v1", using: :path

  resource :ports do
    get ':id', jbuilder:'port' do
      Port.find(params[:id])
    end
  end
end

 

(3)次にルーティングを設定します。

config/routes.rbの中に、

mount API => '/'

を追記します。

# config/routes.rb
Rails.application.routes.draw do
  mount API => '/'
  ・・・
  ・・・
end

 

(4)パスの設定をします。

config/application.rbの中に、

config.paths.add File.join('app', 'api'), glob: File.join('**', '*.rb')
config.autoload_paths += Dir[Rails.root.join('app', 'api', '*')]

を追記します。

# config/application.rb
module Fiddlercrab
  class Application < Rails::Application
    ・・・・
    config.paths.add File.join('app', 'api'), glob: File.join('**', '*.rb')
    config.autoload_paths += Dir[Rails.root.join('app', 'api', '*')]
  end
end

 

(5)ルーティングを確認してみます。

$ rake routes
(in /*******/*******/*******)
Prefix Verb URI Pattern Controller#Action
   api      /           API

正しく反映されているようです。

 

(6)APIを叩いてみます。

# curl http://サーバ名/api/v1/ports/1
{"id":1,"name":"晴海","address":"東京都中央区","created_at":"2014-07-10T23:53:32.503Z","updated_at":"2014-07-10T23:53:32

取得できました。

 


rails consoleで `require’: cannot load such file — readlineになる件

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

CentOSにてreadline-develが入っていないと、rails consoleの実行で以下のようなエラーになります。

$ rails console
/usr/local/rbenv/versions/2.1.2/lib/ruby/2.1.0/irb/completion.rb:9:in `require': cannot load such file -- readline (LoadError)
from /usr/local/rbenv/versions/2.1.2/lib/ruby/2.1.0/irb/completion.rb:9:in `'
from /usr/local/rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/railties-4.1.2/lib/rails/commands/console.rb:3:in `require'
from /usr/local/rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/railties-4.1.2/lib/rails/commands/console.rb:3:in `'
from /usr/local/rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/railties-4.1.2/lib/rails/commands/commands_tasks.rb:128:in `require'
from /usr/local/rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/railties-4.1.2/lib/rails/commands/commands_tasks.rb:128:in `require_command!'
from /usr/local/rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/railties-4.1.2/lib/rails/commands/commands_tasks.rb:59:in `console'
from /usr/local/rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/railties-4.1.2/lib/rails/commands/commands_tasks.rb:40:in `run_command!'
from /usr/local/rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/railties-4.1.2/lib/rails/commands.rb:17:in `'
from bin/rails:4:in `require'
from bin/rails:4:in `'

yumでインストールしてもよいですが、ここではrb-readlineのGemにて解決しましょう。
まず、Gemfileに以下を記述します。

gem 'rb-readline'

インストールを実行して、

$ bundle install

再度、rails consoleを実行します。

$ rails console
Loading development environment (Rails 4.1.2)
irb(main):001:0&gt;

これでOKです。