クリーンでシンプルなRails 3.1demo1というアプリケーションを作成しました。これには2つのコントローラー(helloとgoodbye)が含まれています。ロードしようとすると次のエラーが発生します http:// localhost:3000/say/hello :
ActionView::Template::Error (
(in /home/me/dev/Ruby/demo1/app/assets/javascripts/say.js.coffee)):
3: <head>
4: <title>Demo1</title>
5: <%= stylesheet_link_tag "application" %>
6: <%= javascript_include_tag "application" %>
7: <%= csrf_meta_tags %>
8: </head>
9: <body>
app/views/layouts/application.html.erb:6:in
`_app_views_layouts_application_html_erb___558576499_89622220'
application.html.erbの問題のある行は次のとおりです。
<%= javascript_include_tag "application" %>
Rails 3.0を使用してアプリケーションを作成したとき、この特定の行は次のとおりでした。
<%= javascript_include_tag :defaults %>
そして、これはうまくいきました。実際、application.html.erbを:defaultsを使用するように変更すると、すべてが機能しますが、Rails 3.1の新機能を使用したいと思います。
Rails 3.1がリリースされたばかりなので、これについてGoogleで何も表示できないようです。
ちなみに、私は Agile Web Development with Rails(4th edition)Updated for Rails 3.1 =本。
この質問に答えるのに役立つかもしれないいくつかの環境情報:
$ cat /etc/issue
Ubuntu 10.04.2 LTS \n \l
$ Ruby -v
Ruby 1.9.2p290 (2011-07-09 revision 32553) [i686-linux]
$ Rails -v
Rails 3.1.0
say.js.coffeeファイルの内容:
# Place all the behaviors and hooks related to the matching controller here.
# All this logic will automatically be available in application.js.
# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/
わかりました。問題が何であるかを理解したので、自分の質問に答えます。
問題はapp/assets/javascripts/application.jsファイルにコメントアウトされたコードが含まれていたことでした。ただし、コメントアウトされた行の1つは次のとおりです。
//= require_tree .
この行を削除すると、すべて正常に機能します。
お役に立てれば。誰かがアンダースコアが問題を引き起こしている理由について何らかの洞察を提供できれば、それは素晴らしいことです。
新しいRoR3.2.1アプリを起動したときに、この問題が発生しました。問題は、JSランタイムが欠落していることです。これは、次の行が原因です。
# gem 'therubyracer'
gemfileでは、その前に#があります。 generate scaffold
などを使用するチュートリアルでは、生成されたCoffeescriptファイルでアセットのコンパイルプロセスがトリップするため、神はなぜそれらがRailsで、その行がコメント化されているのかを知っているだけです。
解決策は、その行のコメントを解除することです。別のJSランタイムをインストールしても、問題が解決する場合があります。たとえば、 ExecJSでJavaScriptランタイムが見つかりませんでした 。
公式Ruby on Rails guide は次のように述べています。
CoffeeScriptをJavaScriptにコンパイルするにはJavaScriptランタイムが必要であり、ランタイムがないとexecjsエラーが発生します。通常、Mac OSXおよびWindowsにはJavaScriptランタイムがインストールされています。 Rails therubyracer gemを新しいアプリのコメント行のGemfileに追加し、必要に応じてコメントを解除できます。therubyrhinoはJRubyユーザーに推奨されるランタイムであり、生成されたアプリのGemfileにデフォルトで追加されます。 JRubyの下。ExecJSでサポートされているすべてのランタイムについて調べることができます。
application.js
から2行を削除するだけです
//= require turbolinks
//= require_tree
実行中に同じ問題が発生しましたRails 3.1.1
Gemfileで次のコードを復元すると、問題は解消されました。
group :assets do
gem 'sass-Rails', '~> 3.1.4'
gem 'coffee-Rails', '~> 3.1.1'
gem 'uglifier', '>= 1.0.3'
end
gem 'jquery-Rails'
これは、プロジェクトを最初に設定したとき、つまり「Railsnewmyapp」を使用したときにGemfileに配置されました。
テンプレートファイルには次のものが含まれていることに注意してください。
<%= javascript_include_tag :application %>
それが役立つことを願っています
Windowsを使用していて、RailsInstallerを使用して開発を進めた場合は、RailsInstallerに含まれている.batファイルを使用してサーバーを実行する必要があります。また、残念ながら、conemuのようなCMDフックを使用してサーバーを起動することはできません。
将来のGoogle社員の利益のために、私はこの関連記事に出くわすまで、therubyracer
をインストールしようとしてうさぎの穴を掘り下げました。
ExecJS :: RuntimeError in Rails 3.2.8 engine with javascript_include_tag
上記のリンクは、ExecJSがWindows8用に正しく構成されていないことを説明しています。特に、pottskによって説明された回避策は私のためにトリックをしました。
https://github.com/sstephenson/execjs/issues/81#issuecomment-9892952
これには、cscript
実行可能ファイルがExecJSによって%rubyinstall%\gems\2.0.0\gems\execjs-2.0.1\lib\execjs\runtimes.rb
で実行される方法を変更することが含まれます。
# JScript = ExternalRuntime.new(
# :name => "JScript",
# :command => "cscript //E:jscript //Nologo //U",
# :runner_path => ExecJS.root + "/support/jscript_runner.js",
# :encoding => 'UTF-16LE' # CScript with //U returns UTF-16LE
# )
JScript = ExternalRuntime.new(
:name => "JScript",
:command => "cscript //E:jscript //Nologo",
:runner_path => ExecJS.root + "/support/jscript_runner.js",
:encoding => 'UTF-8' # CScript with //U returns UTF-16LE
)
言うまでもなく、これは永続的な解決策ではありませんが、パッチが組み込まれるまでは稼働します。
//= require_tree
を削除すると、JavaScriptファイルがRailsに読み込まれなくなります。それはおそらくエラーを止めるでしょう、しかしおそらくあなたが望むものではありません。
ただし、私の場合、インデントが正しくない.js.coffee
ファイルがいくつかありました。これを(削除して)修正すると、機能しました。
宝石「therubyracer」を追加すると、問題が修正されました。 <%= javascript_include_tag%>を介して外部jsファイルを追加した後にのみエラーが発生していました
Linux(私のようなUbuntu linux)を使用する場合は、javascriptランタイムをインストールします。以下のコマンドを発行してインストールするのが最善です。
apt-get install nodejs
または、Railsプロジェクトの新規作成ごとに、追加します
gem'therubyracer 'をgemfileに追加し、bundleinstallを実行します
ジェネレーターファイル(application.html.erb)から次の行(行番号6)を削除するだけです。
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
この行を削除するのに欠点がある場合は、更新してください
ありがとう
ジェネレータファイルを変更します(application.html.erb.tt
)次のように:
<%= javascript_include_tag "application", "data-turbolinks-track" true %>
<%= javascript_include_tag :default, "data-turbolinks-track" true %>
devise_scope :user do
get 'sign_out', :to => 'devise/sessions#destroy', :as => :destroy_user_session
end
ルート.rbに上記の行がある場合は、それを削除して実行します。これが私の問題を修正したものです。
この問題はRails 4で発生し、「application」ではなく「defaults」に切り替えると、OPが言うように機能します。しかし、これは外部のGemにあります。編集したくない。Gemfileにバージョン1.8.0のcoffee-script-sourceを使用させ、バンドルインストールを実行してサーバーを起動すると、すべてが正常に機能することがわかりました。
私のために働いたもう一つの試みは、json(そしておそらくyajl-Ruby)gemをGemfileに追加することです。なぜ以前にインストールされていなかったのか、よくわかりません。理由は次のとおりです。
Railsはjsonとtiltに依存するsprocketsに依存するactionpackに依存します
傾きはyajl-Rubyに依存します
しかし、どういうわけか、依存する宝石の多くがインストールされていないようです!?