www.ytoki.netの名前解決ができなくなった話

TL; TR

  • ドメイン設定をさくらとお名前.comで重複して設定してたのがまずかった
    • しかも設定に差分があり,さくらでしか設定してなかったレコードが解決できなくなっていた
  • ytokiはnslookupとdigを覚えた

前置き

先日Rails5対応の本を予約してて,昨日届いたんですよ.

Rails3世代の記憶から追いつけるかなー,久々にブログにメモでもしたらええかなーとか思ってたんですが,

その前にブログにつながらない.

http://www.ytoki.net/wp/

あれ?サーバー死んだ?さくらのVPSのメンテナンスってもうやったんだっけ?

と思ってSSHしたら,ytoki.netではつながらないがIP直打ちならつながる.サーバーは起きている.

???

となったので原因を調べる経過のメモです.(前置きが長い)

1. とりあえずping

IPでは通るけどドメイン・サブドメインでは通らない.SSHした時と同じ.

2. nslookupで通ってるのか確認

普通にnslookupを投げてみるが解決できない.
nslookup -timeout=5 ytoki.net

DNS設定はさくらにしていたはずだったので,そこのNSを見てきてそこへの問い合わせが通るか確認してみると,通る.
nslookup -timeout=5 ytoki.net ns1.dns.ne.jp

うーむ.と悩んでいたところインターン時代にお世話になっていた野々村さんからアドバイスを頂いた.

http://www.nonomura.jp/2014/08/07/0061/

.netのサーバーから引けないならドメインの更新出来てない。その下で帰って来ないなら、ドメイン預けているレジストラに聞く。その下の問題なら、自分の設定を調べる、というところだね。

まずどこで引けなくなっているかの確認、次になぜその事象が起こっているのかの確認。それができれば犯人(原因)が特定されるので、それを修正する(してもらう)という手順だね。

理詰めで行けるやつなんで、一度突き詰めてみると、良い経験にもなると思うよ。

nslookupの使い方を調べていたら,macではdig使うべきらしいので順に掘っていく.

dig @a.root-servers.net ytoki.net
dig @a.gtld-servers.net ytoki.net
dig @01.dnsv.jp ytoki.net

ここまでたどり着いたところで,設定したはずのIPのAレコードとwwwとかを設定するCNAMEが入っていないことに気づく.

さくらの方でDNS設定してたはずなんだけど・・・と思ったが,ある.
ただ違ったのが,NSが01.dnsv.jpじゃなくてns1.dns.ne.jpになってる.

じゃあこの設定はどこのなんだ・・・と思ったら,お名前.comの方で設定してた.
そしてお名前の方はAレコードもCNAMEも設定してない.これか!

3. お名前.comで改めてドメイン設定

AレコードとCNAMEを設定して,改めてdigを順に投げたら名前解決できていることを確認できた.

まとめ

ドメイン設定したのは5年前とかなので当時の記憶はないけど多分よくわからないまま両方コピペしたんだと思う(今もよくわかってない)

今までさくらのほうでAレコード・CNAMEレコードを設定してたDNS設定はNSがns[12].dns.ne.jpになっていて,これがa.gtld-servers.netに渡っていた.
これが,メンテナンスか何かの拍子にお名前.comで設定してたNSが0[12].dnsv.jpのが参照されるようになって,差分のAレコードとCNAMEレコードが引けなくなった,という事らしい.(google appsのMXレコードは両方設定されてた.)

良い勉強になりました.

 

第2回Railsだったり勉強会で発表してきた

初めての勉強会で初めての講演.感想は最後に.

要約:RailsでPDFを出力しようと思ったら,最低3行(+パラメータとか)!
gem ‘wicked_pdf’
gem ‘wkhtmltopdf-binary’
render :pdf
日本語を出すには
<meta http-equiv=”content-type” content=”text/html; charset=utf-8″ />
追記:プレゼンではMacで実行しましたが,Ubuntu@さくらVPSの環境では,このままでは日本語が出ませんでした.
サーバー版では日本語のフォントを持っていない?のが問題のようです.
その場合,IPAフォント等の日本語フォントをインストールしてみて下さい.
sudo apt-get install ttf-ipafont
これで,こちらの環境では正しく出力できていました.
追記2:Herokuでも試してみましたが,
! Heroku push rejected, failed to install gems via Bundler
でつまづきました.
というかこっちも日本語フォントがない問題でつまづく気がしてならないんですが...
誰かできた方がいたらぜひ教えてください!

資料→
SlideShare
Wickedのポスターを使ったネタタイトルも出したんですが,多分あっちは著作権的にアウトだと思われるので外してます.
(似てるフォントを使って文字を差し替えてあったりしたんですが多分誰も気づいてないよねー)
ソース→
GitHub – PDF-Bills

続きを読む 第2回Railsだったり勉強会で発表してきた

GitHubに登録してみた

来週の勉強会発表用にソースを公開しようと思っていたので,GitHubに登録してみることに.
メモとして残してみます.

主に参考にしたのはこちら.
githubの使い方: Railsアプリの作成からgithubへのはじめてのpushまで – memo.yomukaku.net http://memo.yomukaku.net/entries/194

1.GitHubの準備
ローカルでGitを使える環境は整えてあったので,ここから.
まずは登録する.
https://github.com/plans
公開予定のもので試してみるので,無料プランを選択.
必要事項を埋めると登録完了.

次に,認証の設定をします.
GitHubではSSH公開鍵認証を使うので,鍵の準備.
herokuに登録したときとかも全部別の鍵を作ってるんだけど,これって一緒でも良かったんだろうか..
ここでは新しく鍵を作ることにして話を進めます,
ssh-keygen -t ssh
ファイル名は
/Users/(user_name)/.ssh/github
に.

2.ローカルでRailsプロジェクトの作成
さくっと作ります.Railsのプロジェクト用のディレクトリにcdしてから,
必要ならrvmで適当なgemsetを作ってrvm use してから,
# 新規Railsプロジェクトの作成
rails new pdf_bills
# 作ったRailsのディレクトリに移動
cd pdf_bills
# git管理対象外のファイルを設定
vi .gitignore
>>
.bundle
db/*.sqlite3*
log/*.log
*.log
tmp/**/*
tmp/*
*.swp
*~
.DS_Store
<<

# gitの新規リポジトリの作成
git init
# gitに全ての更新ファイルをindexしてcommit
git add .
git commit -m “Initial Commit”

3.GitHubにPush
GitHubで新規リポジトリを作成します.
https://github.com/new
ここではpdf_billsというpublicのリポジトリを作成して公開しました.

sshの秘密鍵のファイル名がデフォルトではないので,次の設定が必要
参考:
github に登録する公開鍵ファイルを id_rsa.pub じゃない名前で使いたい→ ~/.ssh/config で解決 – 刺身☆ブーメランのはてなダイアリー http://d.hatena.ne.jp/a666666/20081219/1229696368
Help.GitHub – SSH issues http://help.github.com/ssh-issues/
vi ~/.ssh/config
>>
Host github.com
User git
Hostname github.com
PreferredAuthentications publickey
IdentityFile /Users/(user_name)/.ssh/github
<< IdentityFileはフルパスで指定した方が良さそうです. GitHubにリモートリポジトリを追加してPushします. git remote add origin git@github.com:tokyoster/pdf_bills.git git push origin master GitHub上で自分のプロジェクトを見てみると追加されたのが確認できました.

Crontabを利用したRailsのモデルメソッドの定期実行

備忘録メモ.

Botもどきを作成するには,定期的にポストできるようにしなきゃいかん訳ですね.

と,いうわけでCrontabを使ってモデルメソッド実行(→ボットの投稿)するためのメモ.

参考

rails の model メソッドを簡単に daemon 化する方法

http://doruby.kbmj.com/red/20100707/rails___model___daemon__

rvm+railsなアプリケーションをcronで動かす

http://sanojimaru.com/tag/rvmrails

Cronで動かす場合,非RVM環境でRailsを動かさないといけない.

→rvm wrapper rubyのバージョン@gemsetの名前 action gem

ex.

rvm wrapper 1.8.7@rails3_n1 runner rails

Ubuntu10.04の環境だと,$HOME/bin/runner_railsが作成された.

ちなみにrunnerを動かすから・・・と思って書いたけどファイルの中身を見てもrunnerとか入ってない.

actionってこれのことじゃないのかな?(動いているみたいなのがまた謎)

[RAILS_ROOT]は対象のRailsプロジェクトのルートディレクトリ.

適当にcron.shを作成

vi [RAILS_ROOT]/batch/cron.sh

#!/bin/sh

cd [RAILS_ROOT]

$HOME/bin/runner_rails runner -e development “User.auto_post()” >> cron.log 2>&1

叩いてみる(RVMでgemsetを適用していない環境での確認が必要.)

[RAILS_ROOT]/batch/cron.sh

ログはこの場合は[RAILS_ROOT]/cron.logに出力されるので,なんかちゃんと動いてなさそうだったら中身を見てみる.

必要なGemが入ってねえよ!って趣旨のメッセージが出力されているようならGemfileに足してbundle install

※でも多分RVMのGemsetが使えてないとかそういう系の理由な気がする.

 rvm wrapper に設定したgemsetとかを確認してやり直してみるとうまくいくことも.

動くようなら,Cronの設定.

数字は,左から順に分,時,日,月,曜日.

試しに毎月毎日11時~22時の0分に定期実行するようにすると,こうなる.

crontab -e

# m h dom mon dow command

0 11-22 * * * [RAILS_ROOT]/batch/cron.sh

ちゃんと定時に動けばOKです.

Rails + Devise + omniauthでTwitterの認証

ずいぶん間が空いてしまいましたが技術ネタで更新したいと思います.

最近さくらのVPSを借りまして,Railsなんか入れて遊んでみようと思ったわけです.

Twitterと連携できたらなおさら楽しいよね,ということで,

練習がてらBotのようなものでも作ってみようかとも思っています.

んで,TwitterのOAuthも使える認証機構としてDevise(Devi’c’eじゃなかった)ってのがあったので

使い始めるまでの記録をメモがてら残してみます.

参考にしたページはこのあたりです.

Rails3 認証エンジン「devise」

http://d.hatena.ne.jp/glpgsinc/20110503/1304395983

Rails3 deviseによるtwitter認証

http://d.hatena.ne.jp/glpgsinc/20110508/1304786181

Rails で Devise と OmniAuth を連携させる

http://blog.twiwt.org/e/14b25f

241: 簡単なOmniAuth

http://ja.asciicasts.com/episodes/241-simple-omniauth

//==========作業履歴==========//

// 環境

// Ubuntu 10.04, rvm 1.6.22, ruby 1.8.7, rubygems 1.6.2, rails 3.0.7

// rvmは次のようなgemsetを作成済み

rvm use 1.8.7@rails3

rails new test_d -d mysql

cd test_d

vi .rvmrc

rvm use 1.8.7@rails3

// Gemfileの編集.

// Rails3ではmysql2のバージョンが新しすぎるとハマるので0.3系以上を使わないようにする

vi Gemfile

gem ‘mysql2′,’<0.3’

gem ‘devise’

gem ‘oa-oauth’, :require => “omniauth/oauth”

// gemとdbの準備をする

bundle install

rake db:create

rake db:migrate

// deviseのインストール

rails g devise:install

// Oauthのconsumer_keyとconsumer_key_secretの情報を追加

// 予めdev.twitter.comで取得する

vi config/initializers/devise.rb

config.omniauth :twitter, “consumer_key”,”consumer_key_secret”

// deviseの機能を使えるモデルの生成

rails g devise User

// omniauthを使うためには :omniauthable

vi app/models/user.rb

class User < ActiveRecord::Base

devise :trackable, :omniauthable

end

// migrationの作成

// 要らないものは消す.足りないカラムは後からrake db:migrateで追加するので今は気にしない

vi db/migrate/20110715043006_devise_create_users.rb

class DeviseCreateUsers < ActiveRecord::Migration

def self.up

create_table(:users) do |t|

t.trackable

t.timestamps

end

end

def self.down

drop_table :users

end

end

// uid, screen_name, access_token, access_secret を入れるカラムの追加

rails g migration AddTokenToUser uid:integer screen_name:string

access_token:string access_secret:string

// DBに関係する記述が終了.migrationする

rake db:migrate

// routesの確認

rake routes

> user_omniauth_callback /users/auth/:action/callback(.:format) {:controller=>”devise/omniauth_callbacks”, :action=>/twitter/}

// callbackにカスタムのコントローラーを使えるようにする為にroutesを設定

vi config/routes.rb

devise_for :users, :controllers => {:omniauth_callbacks => “omniauth_callbacks”}

> user_omniauth_callback /users/auth/:action/callback(.:format) {:controller=>”omniauth_callbacks”, :action=>/twitter/}

// callback用のカスタムコントローラーの作成

rails g controller OmniauthCallbacks twitter

vi app/controllers/omniauth_callbacks_controller.rb

class OmniauthCallbacksController < ApplicationController

def twitter

# You need to implement the method below in your model

@user = User.find_for_user_oauth(env[“omniauth.auth”],nil)

if @user.persisted?

flash[:notice] = I18n.t “devise.omniauth_callbacks.success”,

:kind => “User”

sign_in_and_redirect @user, :event => :authentication

else

session[“devise.twitter_data”] = env[“omniauth.auth”]

redirect_to root_path

end

end

end

// Userモデルにメソッド追加.

// DBに既に保存されていればそれを返す.そうでなければ新しく保存する

vi app/models/user.rb

class User < ActiveRecord::Base

# Include default devise modules. Others available are:

# :token_authenticatable, :encryptable, :confirmable, :lockable,

timeoutable and
omniauthable

devise :trackable, :omniauthable

# Setup accessible (or protected) attributes for your model

#attr_accessible :email, :password, :password_confirmation, :remember_me

def self.find_for_user_oauth(access_token, signed_in_resource=nil)

data = access_token[‘extra’][‘user_hash’]

if user = User.find_by_uid(access_token[‘uid’].to_i)

user

else

User.create!({

:uid => access_token[‘uid’].to_i,

:screen_name => data[‘screen_name’],

:access_token => access_token[‘credentials’][‘token’],

:access_secret => access_token[‘credentials’][‘secret’]}

)

end

end

end

// トップページを作成,サーバーのrootに設定

rails g controller welcome index

vi config/routes.rb

root :to => ‘welcome#index’

// アプリケーション内の共通テンプレートにログイン用のリンクを張る

vi app/views/layout/application.html.erb

<% if user_signed_in? %>

Hi! <%= current_user.screen_name %>

|

<%= link_to “Sign Out”, destroy_user_session_path %>

<% else %>

<%= link_to “Sign in with Twitter”, user_omniauth_authorize_path(:twitter) %>

<% end %>

// サインアウトしたときのためのリンクのroutesを張るために編集

vi config/routes.rb

devise_for :users, :controllers => {:omniauth_callbacks =>

“omniauth_callbacks”} do

get ‘/users/sign_out’, :to => ‘devise/sessions#destroy’, :as =>

:destroy_user_session

end

// 消さないとサーバーのルートが見られない

rm public/index.html

// Webrick起動

rails s

// ログインができるかの確認の為に,WebのTwitterからログアウトしておくといい.

// ブラウザで開く.localhost:3000とか.

f:id:tokyoster0907:20110715165813p:image

// Sign in with TwitterをクリックしてOauth認証画面に遷移

f:id:tokyoster0907:20110715165812p:image

// ログインできていることを確認

f:id:tokyoster0907:20110715165814p:image

// mysqlからDBにも保存されていることを確認できる

mysql -u root test_d_development

select * from users;

//============作業履歴終了=============//

できることの幅が広がりそうなので,興味のある方は試してみてはいかがでしょうか.