CentOS6.4 + ruby2.0 + rails4 インストール備忘録(その弐:turbolink & passenger 編)
- 2013/11/18 (Mon) |
- Ruby on Rails |
- CM(0) |
- Edit |
- ▲Top
Rails 4 になって turbolinkなる機能が追加されたらしいのだが、これが結構評判悪くて、外そうという話になった。外せ言われても、どうしたらいいのか分からないんですけど……
というわけで先人にお聞きしました 笑
Rails 4 で turbolinks をオフにする方法
簡単にポイントを挙げると、Railsアプリを生成する段階以降、以下の手順を踏めばいい。
作業自体は「Ruby on Rails 3 アプリケーションプログラミング」(山田祥寛著:技術評論社)に書いてある通りに行うことでほとんど悩みなく、結構手早くできた。
が、しかし、
いざそのpassengerを使ってApache経由でアプリを起動(=ブラウザで表示)させようとすると、「could not find a JavaScript runtime. 」というメッセージが表示されて何も動きやがらない。だがどう考えても前回までの作業でnode.js とそれに対応するrubyモジュール「execjs」はインストール済みなのは間違いなく、全く訳が分からない。
エラーの出ている箇所をスタックトレース情報を元にたどると、どうやら execjsの構成ファイルである「runtime.js」の以下の部分で指定されているはずのランタイムがない、と言ってるようなのだ。
なにぃぃぃ?!
それじゃ成す術なしじゃねぇかよ~……と思っていたら、やはりここでも同じことではまった先輩がいらっしゃいました。 笑
HOWTO: RubyOnRails + ExecJS + NodeJS - "Could not find a JavaScript runtime"
それによれば上記のコードを以下のように直せば行けるとのこと。
:command キーに対応する、ランタイムのパスを"node"から直接node.js がインストールされているパスに置き換えてしまうというわけだ。(注:ここでは/user/local/bin/node となっているが、実行環境によってここは読みかえる必要がある。whichコマンドもしくはwhereis コマンドを使えばそのパスは取得できる。[which node または whereis node])
実際にやってみるとこれがすこぶる上手く行った。
よかった、よかった……
番外編:production モードで rails console コマンドや rake db:migrate コマンド等を扱う際の注意。
Rails はデフォルトでは開発モードである develop 環境で作業をするため、運用時に指定することの多い、production モードで rails コマンドや rake コマンドを実行するには、オプションを付けないといけない。
Rails and rake db:migrate in Production Mode
ポイントになる具体例だけ書いておく。
番外編2: passengerで動かすとasset pipeline が動かない
もしそうなったら、config/environment/production.rb の以下部分を修正する.
というわけで先人にお聞きしました 笑
Rails 4 で turbolinks をオフにする方法
簡単にポイントを挙げると、Railsアプリを生成する段階以降、以下の手順を踏めばいい。
- Railsアプリを生成する際、bundlerの実行をスキップするオプションをつけてコマンド実行する。
rails new アプリケーション名 --skip-bundle
- application.html.erb に記載されているHTMLタグの中にある、「"data-turbolinks-track" => true」という属性設定を削除
- application.js に記載されている「//= require turbolinks」の行を削除
- Gemfileの「gem 'turbolinks'」という記述をコメントアウト後、bundle install実行
作業自体は「Ruby on Rails 3 アプリケーションプログラミング」(山田祥寛著:技術評論社)に書いてある通りに行うことでほとんど悩みなく、結構手早くできた。
が、しかし、
いざそのpassengerを使ってApache経由でアプリを起動(=ブラウザで表示)させようとすると、「could not find a JavaScript runtime. 」というメッセージが表示されて何も動きやがらない。だがどう考えても前回までの作業でnode.js とそれに対応するrubyモジュール「execjs」はインストール済みなのは間違いなく、全く訳が分からない。
エラーの出ている箇所をスタックトレース情報を元にたどると、どうやら execjsの構成ファイルである「runtime.js」の以下の部分で指定されているはずのランタイムがない、と言ってるようなのだ。
Node = ExternalRuntime.new(
:name => "Node.js (V8)",
:command => ["node"],
:runner_path => ExecJS.root + "/support/node_runner.js",
:encoding => 'UTF-8'
)
なにぃぃぃ?!
それじゃ成す術なしじゃねぇかよ~……と思っていたら、やはりここでも同じことではまった先輩がいらっしゃいました。 笑
HOWTO: RubyOnRails + ExecJS + NodeJS - "Could not find a JavaScript runtime"
それによれば上記のコードを以下のように直せば行けるとのこと。
Node = ExternalRuntime.new(
:name => "Node.js (V8)",
:command => ["/usr/local/bin/node"],
:runner_path => ExecJS.root + "/support/node_runner.js",
:encoding => 'UTF-8'
)
:command キーに対応する、ランタイムのパスを"node"から直接node.js がインストールされているパスに置き換えてしまうというわけだ。(注:ここでは/user/local/bin/node となっているが、実行環境によってここは読みかえる必要がある。whichコマンドもしくはwhereis コマンドを使えばそのパスは取得できる。[which node または whereis node])
実際にやってみるとこれがすこぶる上手く行った。
よかった、よかった……
番外編:production モードで rails console コマンドや rake db:migrate コマンド等を扱う際の注意。
Rails はデフォルトでは開発モードである develop 環境で作業をするため、運用時に指定することの多い、production モードで rails コマンドや rake コマンドを実行するには、オプションを付けないといけない。
Rails and rake db:migrate in Production Mode
ポイントになる具体例だけ書いておく。
rails console production
rails dbconsole production
rails server -e production
rake db:migrate RAILS_ENV=production
番外編2: passengerで動かすとasset pipeline が動かない
もしそうなったら、config/environment/production.rb の以下部分を修正する.
# Do not fallback to assets pipeline if a precompiled asset is missed.
# config.assets.compile = false #=> 旧
config.assets.compile = true #=> 新
PR
カレンダー
フリーエリア
最新CM
最新記事
(06/05)
(06/04)
(06/04)
(11/18)
(11/18)
ブログ内検索
最古記事
(09/15)
(09/20)
(09/27)
(09/27)
(10/11)
COMMENT