Just do IT

思うは招く

Linux(Ubuntu)でSinatraが使える状態にする準備

ウェブアプリケーション作成の練習にSinatraを使うことになっため、Sinatraを使う状態にする。

前提となる環境

LinuxRubyを入れる方法はこちら。

k-koh.hatenablog.com

手順

まずは適当なディレクトリを作ってそこへ移動しておく。

bundlerをインストール

いろんなgemを一気にインストールしたり、管理しやすくするためのbundlerをインストールする。

gem install bundler

bundle initをしてGemfileを作成

bundle init

Gemfileに以下を追記。

# 基本的なもの
gem 'sinatra'
gem 'sinatra-contrib'

# オプション(DBと連携したいなら)
gem 'activerecord'
gem 'sqlite3'

※sqlite3はエラーが出る場合が多いので別記事にした。

Ubuntuにsqlite3をインストールする方法 - オランウータンとぼく

そして、bundleを使ってgemたちをインストール。

bundle install --path vendor/bundle

Sinatraのファイルを設定

設定ファイルを作成。

touch app.rb

そのファイルに簡単なルーティングを設定。

require 'sinatra'
require 'sinatra/reloader'

get '/' do
  'hello'
end

Sinatraを起動する前にvagrantファイルを変更する。

vagrantファイルの設定

仮想環境でやっているため、普通にlocalhost:4567にアクセスしても何も表示されない。 そこで、vagrantファイルをいじる。

Vagrant.configure("2") do |config|

この下あたりに次の文を書き込む。 もしくは、すでに書いてあればその文の先頭の#を外してコメントアウトし、有効化する。

config.vm.network "private_network", ip: "192.168.33.10"

これで仮想マシンを再起動し、再度ログイン。

vagrant reload
vagrant ssh

Sinatraディレクトリまで移動し、次のコマンドを打つ。

bundle exec ruby app.rb -o 192.168.33.10

※bundleを使ってるので普通にruby app.rb -o 〜ではダメらしい。

プログラムを実行する際は、最初にbundle execを実行します。(指定無しだと互換性を考慮せずにシステム最新のgemを使ってしまう)

Bundlerの使い方 - Qiita

ipアドレスを指定している。 これで

http://192.168.33.10:4567/

にアクセスすれば

'hello'

と表示されるはず。 これでとりあえずはLinuxSinatraを使う準備ができた。

その他の方法:プログラム中に指定する

上記では起動時に-oオプションでIPアドレスを指定しておこなった。 いろいろ調べてみると、IPアドレスを指定する以外に、設定ファイルに書き込む方法もあるようだ。

例えば設定ファイルがapp.rbならそこに次を追記する。

set :environment, :production

Sinatra ver1.4.0以降、デベロップメント環境だとlocalhostからのアクセスしか受け付けないのがデフォルト。上記を追記して実行環境を変更する。

外部接続だとSinatraはデフォルトの状態では繋がらない。あとlocalhostのあるあるミスも。 - Qiita

追記:上記でもできない場合

ある日、何もしてないのに突然Sinatraで作ったアプリにブラウザからアクセスできなくなった。

上記を試してもダメで、PCを再起動したらできた。なんやそれ・・・。昔のテレビ方式かよ。

参照