ウェブアプリケーション作成の練習にSinatraを使うことになっため、Sinatraを使う状態にする。
前提となる環境
手順
まずは適当なディレクトリを作ってそこへ移動しておく。
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
bundle exec ruby app.rb -o 192.168.33.10
※bundleを使ってるので普通にruby app.rb -o 〜
ではダメらしい。
プログラムを実行する際は、最初にbundle execを実行します。(指定無しだと互換性を考慮せずにシステム最新のgemを使ってしまう)
ipアドレスを指定している。 これで
http://192.168.33.10:4567/
にアクセスすれば
'hello'
と表示されるはず。 これでとりあえずはLinuxでSinatraを使う準備ができた。
その他の方法:プログラム中に指定する
上記では起動時に-o
オプションでIPアドレスを指定しておこなった。
いろいろ調べてみると、IPアドレスを指定する以外に、設定ファイルに書き込む方法もあるようだ。
例えば設定ファイルがapp.rb
ならそこに次を追記する。
set :environment, :production
※Sinatra ver1.4.0以降、デベロップメント環境だとlocalhostからのアクセスしか受け付けないのがデフォルト。上記を追記して実行環境を変更する。
外部接続だとSinatraはデフォルトの状態では繋がらない。あとlocalhostのあるあるミスも。 - Qiita
追記:上記でもできない場合
ある日、何もしてないのに突然Sinatraで作ったアプリにブラウザからアクセスできなくなった。
上記を試してもダメで、PCを再起動したらできた。なんやそれ・・・。昔のテレビ方式かよ。