メモです

メモです

HerokuでSinatraが動かない

【問題】

HerokuにSinatraをつかったAppをデプロイした後、Appを開いても

「Application error
An error occurred in the application and your page could not be served. If you are the application owner, check your logs for details.」

と出てしまう

【解決方法】

①Appのディレクトリにconfig.ruという名前のファイルを作り、

require './hoge'
run Sinatra::Application

を書き込む。

hogeの部分は同じディレクトリ内にあるhoge.rbに合わせる。app.rbの場合、require './app'となる。

②その後、再度デプロイ

 

【解決までの流れ】

①再デプロイ後、ターミナルで「heroku restart --app application_name」を打つが変化なし。

②ターミナルで「heroku logs」を打ち、ログを確認すると「 at=error code=H10 desc="App crashed" 」「configuration /app/config.ru not found」が出ていた。

Deploying Rack-based Apps | Heroku Dev Centerを見ながらconfig.ruを追加すると直った。

 

・config.ruについて

config.ruはRack用の設定ファイルで、SinatraはRackを使っているのでHeroku上で動かすときに必要。

 

・Rackについて

サーバフレームワークRubyフレームワークの橋渡しをするもの。Rackを間に挟むことで、サーバフレームワークSinatraRailsなどの各Rubyフレームワークに個別に対応する手間が省け、Rackに対応するだけでよくなる。逆にRubyフレームワーク側もApacheなどの各サーバフレームワークに個別に対応する手間が省ける。

RailsもRackエンドポイントだからRackアプリケーションらしい

 

Railsのときには自動的に生成されて特に意識していなかったので、なかなかRackまで思い当たらず少し修正に手間取った。

 

【参考文献】

http://route477.net/d/?date=20080716

Rack解説 - Rackの構造とRack DSL - Qiita

HEMTTの読み

米軍のHEMTT(重高機動戦術トラック)の読み方がわからなかったので調べた。

「HEMTT pronounce」で検索すると以下のようなサイトを見つけた。

How to pronounce Hemtt: HowToPronounce.com

「ヘメット」「ヘムト」「ヘント」に聴こえる。

また、YouTubeでHEMTT紹介動画を見たが動画中「エイチイーエムティーティー」と言っていた。

 

resourcesをnestさせたモデルがHeroku上で期待した動作をしない

【問題】

resourcesをnestさせたモデルがHeroku上で期待した動作をしない

【解決方法】


schema.rbに意図していない記述が誤って混入していた。それを除去したところ期待した動作をした。

【状況】

・GroupとUserという二つのモデルがあり
group.rb 
has_many:users

user.rb
belong_to:group
という関係を持つ。

・heroku上では「https://sample.herokuapp.com/groups」のページはローカルと同じように表示されるが、「https://sample.herokuapp.com/groups/1/users 」のページは表示されず、
「We're sorry, but something went wrong. If you are the application owner check the logs for more information.」
が表示されてしまう。このときheroku log には
ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR: relation "users" does not exist」
と表示される

【解決までの流れ】

やっても解決しなかったこと
・heroku rake db:reset
ActiveRecord::NoEnvironmentInSchemaError:
Environment data not found in the schema. To resolve this issue, run:
bin/rails db:environment:set RAILS_ENV=production」が表示された

・heroku rake db:migrate RAILS_ENV=production
特に変わりなし

・heroku pg:psqlを実行し、select * from users;
「relation "users" does not exist」が表示された

・bin/rails db:environment;set RAILS_ENV=production
特に変わりなし

・herokuでアプリを一度削除。もう一度やり直す
特に変わりなし

・「heroku rake db:schema:load RAILS_ENV=production」
コマンドラインを見ると
groupsテーブルの作成は成功しているが、usersテーブルを作成しようとすると
「rake aborted! NameError:: uninitialized constant」が表示される。

usersのテーブルだけが作成できないということがusersモデルを定義するファイルがおかしいのではと考える。
結果的にschema.rbのuserモデル定義部分に全く意図していない記述が混入していた。それを除去した後に、通常通りdeployすると期待通りの表示がされた。

【感想】

・本来は設定等に起因しない単なるミスタイプが原因のエラーは知見としての有用性は低いので投稿すべきではないとは思うが、何らかの設定ミスだと思い込み初歩的なミスを犯していたことは自分のために記録に残すべきと考えて投稿した。

【教訓】

・エラー内容で検索しても全く引っかからないときは初歩的なタイポの可能性がある
・エラーログを丹念に追うことはやはり重要である
・ロジカルにエラー原因を考える。闇雲にコマンドを連発しない。今回はgroupテーブルだけが作成できているということにもっと注意を向けるべきだった。

リムパックの米空母撃沈判定について

米空母を撃沈判定するのは珍しいことではない

・2004年にカナダのディーゼル潜水艦が米空母を撃沈判定

How to Sink an Aircraft Carrier – War Is Boring – Medium

・2015年にフランスの原潜が米空母を撃沈判定

In 2015, a 30 Year Old French Nuclear Submarine 'Sank' a U.S. Aircraft Carrier | The National Interest Blog

ネットの書き込みのみでソースはないが2004年に韓国の潜水艦が米空母を撃沈判定というのもある。

 

米空母を「撃沈」が頻繁に起きる確かな理由は不明だが、ネットで検索したところ

・米空母は動ける海域が制限されており、小さな範囲を潜水艦で追い回すことができるから

・米海軍からのリムパック参加賞

・国別対抗ではなく仮想的な状況設定に基づき参加艦艇が2グループにわかれて闘うので米海軍の全力ではない。2015年の撃沈でもフランスの原潜が米海軍のP-3Cの援護下で撃沈したとある。

・操艦や連携の錬度向上を目的としているのであって、実際の戦闘行動はおまけ

・各国とも真の実力は軍事機密なので見せていない。

などが理由として挙げられている。

 

またSINKEXという名前で米海軍の退役艦艇を的にして、実際に撃沈させる訓練もリムパックでは行われている。

電磁気の用語のメモ

電位φとは

注1:電位と静電ポテンシャルとほぼ同じ意味。

注2:記号はφ(ファイ)かVで表す。

あるモノが持つ位置エネルギーはそのモノがある高さが高くなればなるほど大きくなる。(基準を地面にとった場合)

同様に、電荷をもつ点電荷からの距離が近いと大きい。離れると小さい。

(基準を電荷から電荷からの影響を受けない無限遠にとった場合)

 V=\displaystyle \frac{kQ}{r}

・電位φを偏微分してマイナスをつけると電界E(電場)になる。

 E=-grad φ

電圧とは

電磁気において電圧は二つの電位の差のことを指す。二つの電位差があると差をなくそうとする力がかかる。だからその差のことを電圧という

・電圧Vを微分すると電界E(電場)になる。

 

電場とは

電荷の周りにできるやつ。オーラみたいなやつ。オーラの中に別の電荷が入ると影響される。電場(オーラ)の強さは

 V=\displaystyle \frac{kq}{r^{2}}

 となる。ある電荷が電場の中に入ると

 F=qE

という力を受ける。

 

おまけ

 E=-\displaystyle \frac{dv}{dx}になぜマイナスがつくか?

 

detail.chiebukuro.yahoo.co.jp