Hatena::ブログ(Diary)

Lost+Found

 | 

2009-07-04

Herokuの手順

| 19:25 | Herokuの手順のブックマークコメント

ローカルでSinatraベース作成

参考にHello worldの例を...

require 'rubygems'
require 'sinatra'

get '/' do
  "Hello world"
end

できたら、

ruby hoge.rb

で実行、そして http://localhost:4567/にブラウザでアクセスする。

config.ruはrequireを書き換える。

require 'myhello' ; run Sinatra::Application

ある程度動いたらデプロイ

$ git init
$ git add .

まちがってadd したら、git rm --cached hogehoge で取り戻し

$ git commit -m "initial commit"
$ heroku create
$ heroku rename fugafuga
$ git push heroku master

consoleを使ってインタラクティブに操作もできる

18:43 | consoleを使ってインタラクティブに操作もできるのブックマークコメント

$ sequel sqlite://test.db
Your database is stored in DB...
irb(main):001:0> DB << "create table t (a text, b text)"
=> 0
irb(main):002:0> DB << "insert into t values ('a', 'b')"
=> 1
irb(main):003:0> DB['select a from t']
=> #<Sequel::SQLite::Dataset: "select a from t">
irb(main):004:0> dataset = DB['select a from t']
=> #<Sequel::SQLite::Dataset: "select a from t">
irb(main):005:0> dataset.count
=> 1
irb(main):006:0> dataset.map(a)
NameError: undefined local variable or method `a' for main:Object
        from (irb):6
irb(main):007:0> dataset.map(:a)
=> ["a"]
irb(main):008:0> exit

$ ls
test.db test.rb

 $ sequel sqlite://test.db
Your database is stored in DB...
irb(main):001:0> dataset = DB[:t]
=> #<Sequel::SQLite::Dataset: "SELECT * FROM `t`">
irb(main):002:0> dataset.map(:a, :b)
ArgumentError: wrong number of arguments (2 for 1)
        from (irb):2:in `map'
        from (irb):2
irb(main):003:0> dataset.map(:a)
=> ["a"]
irb(main):004:0> dataset.insert(:a => "hoge", :b => "fuga")
=> 2
irb(main):005:0> dataset.insert(:a => "hoge2", :b => "fuga2")
=> 3
irb(main):006:0> dataset.map(:a)
=> ["a", "hoge", "hoge2"]
irb(main):007:0> dataset.count
=> 3
irb(main):008:0> exit

SequelのREADMEに掲載されているサンプル

18:24 | SequelのREADMEに掲載されているサンプルのブックマークコメント

これにほとんど集約されている。すばらしい。

require 'rubygems'
  require 'sequel'

  DB = Sequel.sqlite # memory database

  DB.create_table :items do
    primary_key :id
    String :name
    Float :price
  end

  items = DB[:items] # Create a dataset

  # Populate the table
  items.insert(:name => 'abc', :price => rand * 100)
  items.insert(:name => 'def', :price => rand * 100)
  items.insert(:name => 'ghi', :price => rand * 100)

  # Print out the number of records
  puts "Item count: #{items.count}"

  # Print out the average price
  puts "The average price is: #{items.avg(:price)}"
  DB['select * from items'].each do |row|
    p row
  end
  DB << "create table t (a text, b text)"
  DB << "insert into t values ('a', 'b')"

sqlite3-rubyってgemをインストールしてみる

| 18:14 | sqlite3-rubyってgemをインストールしてみるのブックマークコメント

gem search sqlite してみた結果、'sqlite3-ruby'がそれっぽっかったのでインストールしてみた。

再度、確認してみる...... ビンゴ。

 $ ruby test.rb 
Item count: 3
The average price is: 40.8936094764644

うまくいった。

とりあえずSequelのREADME触ってみるが、エラーでて動かない。

| 18:08 | とりあえずSequelのREADME触ってみるが、エラーでて動かない。のブックマークコメント

いかのようなエラー

/opt/local/lib/ruby/gems/1.8/gems/sequel-3.2.0/lib/sequel/database.rb:112:in `adapter_class': Could not load sqlite adapter: (Sequel::AdapterNotFound)

SQLite入れる

| 18:03 | SQLite入れるのブックマークコメント

sudo port install sqlite3

rubyバインディングも

$ sudo gem install sqlite-ruby

サーバーに繋いでみる

| 17:41 | サーバーに繋いでみるのブックマークコメント

サーバが起動している状態で以下のコマンドを実行

$ /opt/local/lib/postgresql84/bin/psql mydb

設定がうまくいってれば、現在のユーザでデータベースに接続しにいく。

以下のコマンドでバージョンが表示されればおk

# SELECT version();

ロール(ユーザ)とデータベースの作成

| 17:28 | ロール(ユーザ)とデータベースの作成のブックマークコメント

まずロールを作成する必要がある。

$ sudo -u postgres /opt/local/lib/postgresql84/bin/createuser snaka

デフォルトの'postgres'ユーザ権限で'snaka'を作成

すると普通にdb作成が完了。

 $ /opt/local/lib/postgresql84/bin/createdb mydb

ちなみに、ロールを作ってないと以下のようなエラーが出た。

 $ /opt/local/lib/postgresql84/bin/createdb mydb
createdb: could not connect to database postgres: FATAL:  role "snaka" does not exist

起動スクリプトの調整

| 17:05 | 起動スクリプトの調整のブックマークコメント

org.macports.postgresql84-server.plist から、サーバ起動用スクリプトを特定。

/opt/local/etc/LaunchDaemons/org.macports.postgresql84-server/postgresql84-server.wrapperをviで開き、さっきinitdbしたディレクトリに変更。

#
# Start
#
Start()
{
        su postgres -c "${PGCTL} -D ${POSTGRESQL84DATA:=/opt/local/var/db/pgsql/data} start -l /opt/local/var/log/postgresql84/postgres.log"
}

修正したら、以下のコマンドでサーバを起動してみる。

$ sudo launchctl start org.macports.postgresql84-server

エラー出てないので大丈夫っぽい。

PostgreSQLをインストール後にやること

| 16:36 | PostgreSQLをインストール後にやることのブックマークコメント

インストールした時点で専用ユーザ'postgres'が作成されていた

ドキュメントの確認

$ port contents postgresql84

で、インストーるされたファイルを参照、その中からindex.htmlが存在することを確認。

docディレクトリを全て~/Site/postgeress の下にcopyしてブラウザから参照可能に。(ほんとはSymLinkにしたかったけど、なんかできなかった...)

データクラスタの用意

ドキュメントにしたがってDBの環境を用意。まずデータベースクラスタというのが必要らしい。

# su -
# cd /opt/local/var/db
# mkdir pgsql
# su postgres

$ cd /opt/local/lib/postgresql84/bin
$ initdb -D /opt/local/var/db/pgsql/data

こんな感じでデータベース領域を初期化

「無料でつくるTwitter bot」というタイトルでブログ書く

10:37 | 「無料でつくるTwitter bot」というタイトルでブログ書くのブックマークコメント

今考えている内容は以下のとおり

環境を整える
Ruby, Sinatraのインストール、Herokuアカウント,bot用Twitterアカウントを作るまで
超基本的なbotを作る
ローカルでbotを動かしてtwitterに投稿させてみるまで
Herokuでbotを動かす
作ったbotをherokuにデプロイするまで
何かを監視する機能を追加する
botに監視機能を付けてみる。
followerの発言に反応する機能を追加する
botに発言に反応する機能を追加する
トラックバック - http://d.hatena.ne.jp/Snaka/20090704
 |