4

所以我有一个正在使用的应用程序Rails 3.1.3,并在Jruby. 我们允许用户导入他们自己的主题(所以他们自己的 CSS 内容),因此我们不会在生产中预编译我们的资产(我知道预编译的性能原因,但是我们没有找到性能打得那么差,这对我们来说是最好的决定)。

由于我们要支持多种语言,我们也有翻译文件。Rails 翻译已经完成config/locales/*.yml,然后我们的 Javascript 文件需要翻译。以前我们将这些翻译放在一个assets/javascripts/config.js文件中——但这对于未来来说是高度不可扩展的。我们想要一个允许从文件中提取 Javascript 文件的解决方案config/locales/*.yml。我们遇到了i18n-jsGem ( 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 simple 假设您正在预编译资产,并且没有设计为在没有实际安装在服务器上的 gem 的生产环境中运行。但是,我想知道是否有人可以就这个想法提供一些指导?我是对的,还是有办法解决这个问题?

注意:如果我预编译资产 - 生产中没有问题。还要注意,这个生产问题只有在我们开始使用这个 Gem 时才出现 - 所以我知道它与那个 gem 的用法有关,而不是别的。在此更改之前,一切正常。

此外,如果有人对解决语言问题有更好的建议(我们不希望在 JS 文件和语言环境 YAML 文件中维护翻译)。我也将不胜感激为此提出的建议!

谢谢!

4

0 回答 0