Vagrantで Vagrant was unable to mount VirtualBox shared folders. エラーが起こった際の解決法

 

ひょんなことからVagrantを使用する機会があったのですが、何度か再起動していると次のようなエラーが出るようになりました。

Vagrant was unable to mount VirtualBox shared folders. This is usually
because the filesystem "vboxsf" is not available. This filesystem is
made available via the VirtualBox Guest Additions and kernel module.
Please verify that these guest additions are properly installed in the
guest. This is not a bug in Vagrant and is usually caused by a faulty
Vagrant box. For context, the command attempted was:

mount -t vboxsf -o dmode=777,fmode=777,uid=500,gid=500 var_www_html /var/www/html

The error output from the command was:

/sbin/mount.vboxsf: mounting failed with the error: No such device

VirtualBoxの共有フォルダをマウントすることができませんでした、ということですね。そこで、上記の中にも書かれている

mount -t vboxsf -o dmode=777,fmode=777,uid=500,gid=500 var_www_html /var/www/html

を実行してみても改善されなかったのですが、次の記事にある対処法で解決できました。

qiita.com

 

手順は、

$ vagrant up

で上記エラーが出ても構わず

$ vagrant ssh

でログインし、次を実行。私の環境では以下のようになりました。OpenGL supportはコケていてもそもそも必要がないので気にしないことにします。

$ sudo /etc/init.d/vboxadd setup
Removing existing VirtualBox non-DKMS kernel modules [ OK ]
Building the VirtualBox Guest Additions kernel modules
Building the main Guest Additions module [ OK ]
Building the shared folder support module [ OK ]
Building the OpenGL support module [失敗]
(Look at /var/log/vboxadd-install.log to find out what went wrong)
Doing non-kernel setup of the Guest Additions [ OK ]

この後、一旦ログアウトして

$ vagrant reload

とやるとエラーは無くなりました。

CakePHP 2.8.x PHPUnitをインストール

という状態で動作を確認しています。

 

まずはcomposerのインストールです。

$ brew install composer

 

この後、cakephpを設置ルートディレクトリへ移動します。

例えば、「Users->ユーザー名->Sites->cakephp」に設置したとすると、

「/Users/ユーザー名/Sites/cakephp」が移動先となります。

 

移動したのち、以下のコマンドを実行します。

$ composer install

私の環境ではxdebugがインストールされているため、以下のメッセージが表示されましたが、xdebugを無効にする気は無かったので特に何もせずそのままとしました。

You are running composer with xdebug enabled. This has a major impact on runtime performance. See https://getcomposer.org/xdebug

インストールが完了すると、/Users/ユーザー名/Sites/cakephp/venders以下にphpunitなど、composer.jsonに記述されたものがインストールされていると思います。

 

この状態で、「http://localhost/」がデフォルトのURLの場合、「http://localhost/test.php」を開くと以下のような画面となります。

f:id:ixd:20161026115719p:plain

※この画像はテスト作成後のスクリーンショットなので「App Test Cases:」の項目に「Model / User」が表示されていますが、この状態では「EMPTY」となっている筈です。また、何故かDebugKitが2つ表示されちゃってるんですが、これについては原因が不明です。もしわかる方がいましたらコメントいただけると有り難いです!

 

その後は以下の記事を参考に進めさせてもらい、無事実行できることを確認しました。

qiita.com

Ruby on Rails チュートリアル をやってみた その12

前回は「Ruby on Rails チュートリアル をやってみた その11 - IxD's blog」で第11章をやりましたが、今回は最終回です。

railstutorial.jp

 

今回も詰まるようなポイントは特にありませんでしたが、全てを終えてみての感想としては、私は他言語での開発経験があり、フレームワークにも触れてきているので、私個人にとっては、とても分かりやすく書かれていました。ですので詰まる回数も少なくて済んでいますが、そうではない場合は個人差はあると思いますが、努力が必要かもしれないな、と感じました。

チュートリアルをやっていて難しいな、と感じた場合は別のサイトや本を参考に分からない点を理解し、進めていくのも良いですし、

railstutorial.jp

私は受講したことはありませんが、こちらにあるようなセミナーを受講したりするのも一つの手なのかなとも思います。

それぞれにあった学習方法で取り組んでみてはいかがでしょうか。

 

それでは、途中、期間が空いてしまった期間もそれなりにありましたが、「Ruby on Rails チュートリアルをやってみた」 は今回でお終いとします。

Ruby on Rails チュートリアル をやってみた その11(追記 : 2016.08.24)

Ruby on Rails チュートリアルをやってみた」シリーズは約5ヶ月ぶりの更新となります。

前回は「Ruby on Rails チュートリアル をやってみた その10 - IxD's blog」で第10章をやりましたが、今回は

railstutorial.jp

こちらをやっていきます。

 

5ヶ月ぶりとあって最初のうちは忘れているかな、とも思ったのですが意外とそうでもなく、すんなりと進めることができました。

ただし、今回から開発環境を変更しましたので、そちらの方が時間を取られたかもしれません。

因みに、以前、

ixd.hatenablog.jp

上記記事ではCentOSへのインストールについて記載しましたが、今回はOS Xで開発環境を構築することにしました。その際、

qiita.com

最初の調査段階ではhomebrewを使って構築する方法が圧倒的に検索でヒットしたため、上記ページの方法を採用しました。

こちらでチュートリアルを進めていく際は、bundle exec〜やrails serverの実行時に注意が必要です。

 

例えば、テストを行う際、チュートリアルにある構築方法などの場合、

$ bundle exec rake test

となりますが、上記ページの方法で構築した場合は

$ rbenv exec bundle exec rake test

と、なり、サーバ起動は

$ rails server

ではなく、

$ rbenv exec bundle exec rails server

となりますので、チュートリアルを進める際は適宜コマンドを変換して実行することになります。これが面倒に思える場合などは、チュートリアルにある環境構築方法などで行うと良いでしょう。

 

追記:2016.08.24

上記について確認したところ、

テストを行う際のコマンド

$ bundle exec rake test

サーバ起動のコマンド

$ bundle exec rails server

でも実行できました。

 

とりあえずOS XにてRailsチュートリアルを行うために環境を作るのであれば、

qiita.com

などの方法でも良いと思います。

私は前者の方法を採用しましたが、ご自身にあった方を選択されると良いと思います。

 

さて、今回の11章では必須ではないものの、「11.4.4 本番環境での画像アップロード」にてAmazon S3を利用する事になります。その際、以下のページが参考になりました。

以下のページの方法をそのまま採用しても良かったのですが、今回の場合にはコンソールへのログインはそもそも必要ありません。

そのため、以下のページでの手順 2.xを完了したら3.xと4.xは全て飛ばし、5.1から5.3手順を手順2.xの手順完了後すぐに行います。

そして、AWSのS3のコンソールにて、「作成したバケット->プロパティ->アクセス許可」で「さらにアクセス許可を追加する」で「被付与者:」で「認証済みユーザー」を選択し、「リスト」「アップロード/削除」にチェックを入れ、「保存」を押下します。

これで、手順6で無事にアップロードなどが行えるようになります。手順6が無事に完了すると、「リスト11.65」の手前までが完了したことになります。

blog.cloudpack.jp

11章の内容自体はここまでやってきた方なら詰まるポイントはないのではないかと思います。

 

追記:2016.08.11
11.6 演習」の1.において、

 if-else文の2つの分岐に対して、それぞれ異なるパーシャルを使用するようにホームページをリファクタリングしてください。

 とあるのですが、「ホームページ」ではなく「Homeページ」のことだと思われます。一瞬「???」となったので、備忘録的な意味で記述しておきます。
 

次回は、いよいよ最終章である

railstutorial.jp

をやっていきます。

解決済 (Mac)OSXにEclipse4.5 & Pleiadesをインストールしたら動かなった件

一般的にはMacという方が認知度が高いと思うので敢えてMacと言いますが、Eclipseのバージョンが4.4で止まっていたので重い腰を上げ、4.5にすることに。

そこで、

masatoshitada.hatenadiary.jp

こちらの記事を参考にしてみたのですが、

 Eclipse は壊れているため開けません。"ゴミ箱"に入れる必要があります。(若干あやふや)

といった素敵なアラートが出たのでした。当然カッコ内の文字列は書かれていません。Eclipseのみでも当然同じで、右クリックの開くでもダメ。

そこで、

/Applications/Eclipse.app/Contents/MacOS/eclipse -clean

で取り敢えず起動はしたものの、その後も一般的なマウスでの起動やSpotlight検索からの起動でもダメでした。

上記コマンドでターミナルには「libjli.dylib」に関するエラー文的なもの出ますし、何やら根が深いもないなのかなと半ば諦めかけていたところ、こんな記事を見つけました。

d.hatena.ne.jp

ここに書かれている通り、ホームディレクトリにある.eclipseを取り敢えずリネームして再度マウス操作で起動してみると、無事に起動することができました!

 

Railsチュートリアルに関する記事は少しお休みしていますが、折を見てやろうと思います。

Ruby on Rails チュートリアル をやってみた その10

前回「Ruby on Rails チュートリアル をやってみた その9 - IxD's blog」で第9章をやりましたが、今回は

railstutorial.jp

から始めていきます。

 

リスト10.22: 失敗するテストを一時的にコメントアウトする

assert_select 'div#error_explanation'
assert_select 'div.field_with_errors'

は「演習を除いた場合」本リストが初出だと思います。
チュートリアルサイトを指定して「users_signup_test.rb」をググった結果はこちら(2016/03/18 デッドリンクとなっていたため修正しました)


上記結果から、7.7 演習 2.が初出です。以下が該当箇所のコードとなっています。

assert_select 'div#<CSS id for error explanation>'
assert_select 'div.<CSS class for field with error>'

演習問題では該当コードについて「テンプレート」と書かれてはいますが、他の問題のようにFILL_INであるとか、この部分を書き換えろ、的なことが書かれていないので戸惑った方もいるかもしれません。

 

リスト10.23: サーバーログに表示されたアカウント有効化メールの例

細かい点ですが、チュートリアルではメールを送信した際のログの終わりが

<h1>Sample App</h1>

<p>Hi Michael Hartl,</p>

<p>
Welcome to the Sample App! Click on the link below to activate your account:
</p>

<a href="http://rails-tutorial-c9-mhartl.c9.io/account_activations/
fFb_F94mgQtmlSvRFGsITw/edit?email=michael%40michaelhartl.com">Activate</a>
----==_mimepart_5407704656b50_61d3fd1914f4cd02996a--

となっていますが、実際にテストを行ったところ、ログの中身は以下のようになりました。
※mimepartや生成されたURLはチュートリアルのものを使用しています。

<html>
<body>
<h1>Sample App</h1>

<p>Hi Michael Hartl,</p>

<p>
Welcome to the Sample App! Click on the link below to activate your account:
</p>

<a href="http://rails-tutorial-c9-mhartl.c9.io/account_activations/
fFb_F94mgQtmlSvRFGsITw/edit?email=michael%40michaelhartl.com">Activate</a>
</body>
</html>
----==_mimepart_5407704656b50_61d3fd1914f4cd02996a--

当方のミスなのか、果たして...

 

次回「Ruby on Rails チュートリアル をやってみた その11 - IxD's blog」は、

railstutorial.jp

をやっていきます。

Ruby on Rails チュートリアル をやってみた その9

前回「Ruby on Rails チュートリアル をやってみた その8 - IxD's blog」では第8章をやりましたが、今回は

railstutorial.jp

から始めていきます。

 

リスト9.34: ユーザーのindexビュー

説明を読んでみると、

リスト9.34では、7.7の演習のリスト7.31の結果を利用しています。これは、Gravatarヘルパーにデフォルト以外のサイズを指定するオプションを渡します。この演習をまだやっていない場合は、リスト7.31に従ってUsersヘルパーファイルを更新してから先に進んでください。

と書かれていますが、これまで演習では毎回、以下のことが書かれています。

演習とチュートリアル本編との食い違いを避ける方法については、演習用のトピックブランチに追加したメモ (3.6) を参照してください。 

しかし、7.7 演習には、以下のようにも書かれています。

(9.3.1でこれを改善したヘルパーを使います)

説明をきちんと読んでいれば問題はないのですが、この点を見落とすと

wrong number of arguments (2 for 1)

期待する引数の数(1)と実際の数(2)が違うというエラーが発生する原因となりますので注意が必要です。

 

9.6 演習

1. 基本的な考え方として、ヒントにあるようにsession[:forwarding_url]を使用することになりますが、どのタイミングで使用するか、また、どう使うか、というのが問題になります。まずは、

最初に与えられたURLにのみ確実に転送されていることを確認するテストを作成してください

ですので、store_locationがどのタイミングで実行されるか、ということを考えれば自ずと答えは導き出されると思います。次に、

続けてログインを行った後、転送先のURLはデフォルト (プロフィール画面) に戻る必要もありますので、これもテストで確認してください。

とありますが、redirect_back_orの処理がどうなっていたか、また、どのタイミングで実行されるのか、どう使われているか、ということがポイントです。

2. app/views/layouts/_header.html.erb がどうなっているかを確認し、他のテストも参考にしつつ取り組めば比較的簡単だと思います。

3. リスト9.59への穴埋め問題なので、基本的には問題ないかと思います。しかし、最後の 

assert_not @other_user.FILL_IN.admin?

 について、ここで期待されるテスト結果として、どうあって欲しいかが分かるかどうかと、それをどう持ってくるか、という点がポイントとなります。少し上に出てくる、

assert_not @other_user.admin?

だとpatchリクエストを行った後の結果とは言えませんので、どうすればリクエスト結果を反映したものになるのか、というのがヒントです。

4. リストの9.60, 9.61, 9.62があるので説明は割愛します。9.61について、非常に細かな点ですが、

<div class="col-md-6 col-md-offset-3"

となっていますが、正しくは

<div class="col-md-6 col-md-offset-3">

です。 

 

次回「Ruby on Rails チュートリアル をやってみた その10 - IxD's blog」は、

railstutorial.jp

をやっていきます。