2018/05/08 追記
あれこれ書いてますが問題解決したので追記。
config.reload_classes_only_on_change = false;
これ追加したら↓が解決した。
ほんとシンプルなコードではまる
class PostsController < ApplicationController
def index
@posts = Post.all
end
end
<% @posts.each do |post| %>
<%= post.title %><br>
<% end %>
index.html.erbの方で@postsがnilだと怒られる。
コントローラーからビューに変数が渡らないぞー
ちなみに環境
- Windows 10
- Vagrant + VirtualBox
- CentOS 6.9
- Ruby 2.4.0
- Rails 5.1.3
Pumaサーバーを再起動したら治った
rails s -b 0.0.0.0
Pumaサーバー立ち上げっぱなしで作業していたんですが
そうするとインスタンス変数の変更は反映されないんですか?
まじか。。。
そんなばかな。。。
と思うわけだが
事実サーバー再起動すると変更が反映され
再起動しない限り反映されないのだ。
いろいろ試したところ、サーバー立ち上げっぱなしでも
- viewの変更は反映される。
- コントローラーの変更は反映されない。
という振る舞い。
サーバー立ち上げた時点でrb側はプリコンパイルされてるんかな
実行速度考えればそっちのがいいと思うけど
そういう仕様なのかな?
俺の環境がふぁびょってるのかな
うーんわからん
追記、根本的な解決方法はまだわからないけれど
Vagrantの共有フォルダにプログラム一式を置いていることが影響しているっぽい。
ちなみに共有フォルダはリアルタイムに同期されるプラグインvagrant-vbguest
を導入している。
railsアプリを作るときはこんな感じでやっていた
cd /vagrant
rails new myapp
cd ~/
ln -s /vagrant/myapp myapp
railsのアプリ一式は共有フォルダに置き
homeにシンボリックリンクmyapp
を作っている。
試しに
cd ~
rails new hoge
としてファイルの実態もhomeに置き適当なページを作って試したところ
Pumaサーバーを再起動せずともcontrollerの変更が検知された。
共有フォルダのパーミッションかユーザー、グループあたりの問題だろうか?
viewもcontrollerもパーミッションは同じ。だのに
viewの変更は反映されて、controllerの変更は無視される
ということで
Linuxとはお戯れ程度の付き合いしかない俺にはまだ難しいようです。