を使用しているアプリケーションがありRails 3.1.3
、の下にデプロイされJruby
ます。ユーザーが独自のテーマ(つまり独自のCSSコンテンツ)をインポートできるようにするため、本番環境でアセットを事前にコンパイルしません(事前コンパイルのパフォーマンス上の理由を認識していますが、パフォーマンスは見つかりませんその悪い打撃、そしてこれは私たちにとって最良の決定でした)。
複数の言語をサポートしたいので、翻訳ファイルもあります。Railsの翻訳が行われconfig/locales/*.yml
、Javascriptファイルに必要な翻訳があります。以前は、これらの翻訳をassets/javascripts/config.js
ファイルに入れていましたが、これは将来的には非常に拡張性がありません。Javascriptファイルをファイルからプルできるソリューションが必要config/locales/*.yml
でした。i18n-js
Gem(i18n-js )に出くわしました。
この宝石は、ローカルで期待どおりに機能します。ただし、本番環境ではエラーが発生します。最初の問題は、ファイルapplication.js
が見つからないことでした。i18n.js
私にとって、これは理にかなっています。アセットを事前にコンパイルしておらず、i18n-js Gemが本番サーバーにインストールされていないため、アプリケーションはi18n.jsファイルにアクセスできません。assets/javascripts/
そのため、パスにファイルを手動で追加しました。それはそのエラーを修正しました。
現在、このエラーが発生しています。
2012-10-05[INFO] - Internal Server Error: Sprockets::FileNotFound couldn't find file 'file:/tmp/Jetty_0_0_0_0_application.war____.r5dru7/webapp/WEB-INF/lib/tmp-gems.jar!/gems/activesupport-3.1.3/lib/active_support/locale/en.yml'
(in /tmp/Jetty_0_0_0_0_application.war____.r5dru7/webapp/WEB-INF/app/assets/javascripts/i18n/translations.js)
私はとをチェックしましたtmp-gems.jar
、gems.jar
そしてファイルは実際にそこにあります...それで私は混乱します。私の考えでは、i18n-js Gemは、アセットを事前にコンパイルしていることを前提としており、gemが実際にサーバーにインストールされていない本番環境ではアセットなしで機能するようには設計されていません。しかし、誰かがその考えについて何らかのガイダンスを提供できるかどうか疑問に思いましたか?私は正しいですか、それともこれを回避する方法はありますか?
注:アセットをプリコンパイルした場合、本番環境で問題は発生しません。また、この本番環境の問題は、このGemを使い始めたときにのみ発生したことにも注意してください。したがって、このGemの使用法に関連しているだけで、他には何も関係していません。この変更前はすべてが機能していました。
また、言語の問題を回避するためのより良い提案があれば(JSファイルとロケールのYAMLファイルで翻訳を維持したくない)。そのための提案もいただければ幸いです。
ありがとう!