web-dev-qa-db-ja.com

Rails 3.1application.html.erbのjavascript_include_tagに関する問題

クリーンでシンプルな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/
18
ryan

わかりました。問題が何であるかを理解したので、自分の質問に答えます。

問題はapp/assets/javascripts/application.jsファイルにコメントアウトされたコードが含まれていたことでした。ただし、コメントアウトされた行の1つは次のとおりです。

//= require_tree .

この行を削除すると、すべて正常に機能します。

お役に立てれば。誰かがアンダースコアが問題を引き起こしている理由について何らかの洞察を提供できれば、それは素晴らしいことです。

33
ryan

新しい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でサポートされているすべてのランタイムについて調べることができます。

7
Confusion

application.jsから2行を削除するだけです

//= require turbolinks

//= require_tree

3
Talha

実行中に同じ問題が発生しました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 %>

それが役立つことを願っています

2
DavB

Windowsを使用していて、RailsInstallerを使用して開発を進めた場合は、RailsInstallerに含まれている.batファイルを使用してサーバーを実行する必要があります。また、残念ながら、conemuのようなCMDフックを使用してサーバーを起動することはできません。

2
Knyteguy

将来の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
)

言うまでもなく、これは永続的な解決策ではありませんが、パッチが組み込まれるまでは稼働します。

2
camflint

//= require_treeを削除すると、JavaScriptファイルがRailsに読み込まれなくなります。それはおそらくエラーを止めるでしょう、しかしおそらくあなたが望むものではありません。

ただし、私の場合、インデントが正しくない.js.coffeeファイルがいくつかありました。これを(削除して)修正すると、機能しました。

1
thedanotto

宝石「therubyracer」を追加すると、問題が修正されました。 <%= javascript_include_tag%>を介して外部jsファイルを追加した後にのみエラーが発生していました

0
Tarun Reddy

Linux(私のようなUbuntu linux)を使用する場合は、javascriptランタイムをインストールします。以下のコマンドを発行してインストールするのが最善です。

apt-get install nodejs

または、Railsプロジェクトの新規作成ごとに、追加します

gem'therubyracer 'をgemfileに追加し、bundleinstallを実行します

0
hariharan kumar

ジェネレーターファイル(application.html.erb)から次の行(行番号6)を削除するだけです。

<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>

この行を削除するのに欠点がある場合は、更新してください

ありがとう

0
Skyfall

ジェネレータファイルを変更します(application.html.erb.tt)次のように:

<%= javascript_include_tag "application", "data-turbolinks-track" true %>
<%= javascript_include_tag :default, "data-turbolinks-track" true %>
0
kys48
devise_scope :user do
      get 'sign_out', :to => 'devise/sessions#destroy', :as => :destroy_user_session
   end

ルート.rbに上記の行がある場合は、それを削除して実行します。これが私の問題を修正したものです。

0
Gautam

この問題はRails 4で発生し、「application」ではなく「defaults」に切り替えると、OPが言うように機能します。しかし、これは外部のGemにあります。編集したくない。Gemfileにバージョン1.8.0のcoffee-script-sourceを使用させ、バンドルインストールを実行してサーバーを起動すると、すべてが正常に機能することがわかりました。

0
metaforge

私のために働いたもう一つの試みは、json(そしておそらくyajl-Ruby)gemをGemfileに追加することです。なぜ以前にインストールされていなかったのか、よくわかりません。理由は次のとおりです。

Railsはjsonとtiltに依存するsprocketsに依存するactionpackに依存します

傾きはyajl-Rubyに依存します

しかし、どういうわけか、依存する宝石の多くがインストールされていないようです!?

0
billmccord