我正在使用I18n-js,而我的客户端I18n.t调用在生产中运行时都返回翻译缺失消息.
一切都可以开发和测试.
此问题的根源似乎在资产管道中.
I18n.load_path不包含我的任何翻译(运行bin/rake资产:预编译时)它只包含以下路径:
["/home/chris/.rvm/gems/ruby-1.9.3-p125@Project/gems/activesupport-3.2.3/lib/active_support/locale/en.yml",
"/home/chris/.rvm/gems/ruby-1.9.3-p125@Project/gems/activemodel-3.2.3/lib/active_model/locale/en.yml",
"/home/chris/.rvm/gems/ruby-1.9.3-p125@Project/gems/activerecord-3.2.3/lib/active_record/locale/en.yml",
"/home/chris/.rvm/gems/ruby-1.9.3-p125@Project/gems/actionpack-3.2.3/lib/action_view/locale/en.yml"]
Run Code Online (Sandbox Code Playgroud)
这些看起来像来自gems的默认activesupport,activemodel,activerecord和actionpack翻译......
但是,在开发和生产中运行bin/rails控制台时,我的转换路径会按预期进行设置:
1.9.3p125 :002 > I18n.load_path
=> ["/home/chris/.rvm/gems/ruby-1.9.3-p125@Project/gems/activesupport-3.2.3/lib/active_support/locale/en.yml",
"/home/chris/.rvm/gems/ruby-1.9.3-p125@Project/gems/activemodel-3.2.3/lib/active_model/locale/en.yml",
"/home/chris/.rvm/gems/ruby-1.9.3-p125@Project/gems/activerecord-3.2.3/lib/active_record/locale/en.yml",
"/home/chris/.rvm/gems/ruby-1.9.3-p125@Project/gems/actionpack-3.2.3/lib/action_view/locale/en.yml",
"/home/chris/.rvm/gems/ruby-1.9.3-p125@Project/gems/carrierwave-0.6.1/lib/carrierwave/validations/../locale/en.yml",
"/home/chris/.rvm/gems/ruby-1.9.3-p125@Project/gems/devise-2.0.4/config/locales/en.yml",
"/media/sf_code/Project/config/locales/active_record.en.yml",
"/media/sf_code/Project/config/locales/project.en.yml"]
Run Code Online (Sandbox Code Playgroud)
事实上,I18n文档指出:"默认语言环境是:en和来自config/locales/*.rb,yml的所有翻译都是自动加载的."
我也试过在application.rb中指定
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '*.{rb,yml}').to_s]
Run Code Online (Sandbox Code Playgroud)
但仍然没有快乐.
任何人都知道什么可能导致I18n.load_path只在运行资产时才设置:precompile?
谢谢你的任何想法
我有一个Rails应用程序,我在前端使用Ember.我想将与ember相关的文件在目录结构中向下移动一级,但是当我这样做时,模板不再呈现.
在应用程序的普通,vanilla,工作版本中,我的目录结构是:
./app/
assets/
javascripts
application.js
ember-app.js
routes.js
store.js
models/
controllers/
routes/
templates/
views/
Run Code Online (Sandbox Code Playgroud)
with:application.js
//= require jquery
//= require jquery_ujs
//= require handlebars
//= require ember
//= require ember-data
//= require_self
//= require ember-app
App = Ember.Application.create();
Run Code Online (Sandbox Code Playgroud)
和:ember-app.js
//= require ./store
//= require_tree ./models
//= require_tree ./controllers
//= require_tree ./views
//= require_tree ./helpers
//= require_tree ./templates
//= require ./router
//= require_tree ./routes
Run Code Online (Sandbox Code Playgroud)
一切正常.但是,我想将ember-app文件和所有ember javascript代码向下移动一级,当我这样做时,模板不会渲染.(部分应用程序使用Ember,但不是整个应用程序,我正在尝试通过资产管道设置两条不同的路径.)
所需的结构是:
./app/
assets/
javascripts
application.js
embro/
ember-app.js
routes.js
store.js
models/
controllers/
routes/
templates/
views/
Run Code Online (Sandbox Code Playgroud)
with:application.js(修订版:'require …
ruby-on-rails asset-pipeline handlebars.js ember.js ember-rails
我的字体资产在生产中没有摘要的情况下出现了问题.我一耙资产:预编译得到:
5futurebit-webfont-c133dbefd9e1ca208741ed53c7396062.eot
Run Code Online (Sandbox Code Playgroud)
我试图将它与scss中的font-face链接到asset-url,asset-path,font-url和font-path,但所有这些都最终输出路径:
/assets/5futurebit-webfont.eot
Run Code Online (Sandbox Code Playgroud)
现在我正在将/ app/assets/fonts中的资产直接复制到/ public/assets /但是感觉不是这样做的.
我以前曾多次使用asset_sync gem取得了巨大成功,但在Rails 4.0.3项目中使用它似乎导致了问题.
资产被上传,散列和gzip到目标目录(我只使用默认的'assets'),但是当在临时/生产环境中运行应用程序时,路径不正确.
他们采取以下形式:
S3_DOMAIN.com/stylesheets/application.css
Run Code Online (Sandbox Code Playgroud)
代替:
S3_DOMAIN.com/assets/application-HASH.css
Run Code Online (Sandbox Code Playgroud)
还有其他人遇到过这个问题吗?我发现反转此行为的唯一方法是将config.assets.compile设置为true,但这在生产环境中不起作用.
以下是相关的配置文件:
## environments/staging.rb
config.serve_static_assets = false
config.assets.compress = true
config.assets.js_compressor = :uglifier
config.assets.css_compressor = :sass
# Have to set this to true to make asset_sync generate the correct links
config.assets.compile = false
config.assets.digest = true
config.assets.enabled = true
config.assets.initialize_on_precompile = true
config.action_controller.asset_host = "//#{Figaro.env.fog_directory}.s3.amazonaws.com"
config.action_mailer.asset_host = "//#{Figaro.env.fog_directory}.s3.amazonaws.com"
config.assets.prefix = "/assets"
config.assets.debug = false
config.assets.cache_store = :memory_store
##config/asset_sync.yml
defaults: &defaults
fog_provider: 'AWS'
aws_access_key_id: "<%= ENV['AWS_ACCESS_KEY_ID'] %>"
aws_secret_access_key: "<%= ENV['AWS_SECRET_ACCESS_KEY'] %>"
# To …Run Code Online (Sandbox Code Playgroud) ruby ruby-on-rails asset-pipeline ruby-on-rails-4 asset-sync
我有JW Player 6的许可版本.我下载了文件并将它们放在assets/javascript目录中.除了皮肤目录,还有一个用于HTML5播放器的JS文件以及一个用于flash播放器的flash.swf文件.到目前为止,我所做的一切都在本地工作,但是当我推送到Heroku时,我会遇到错误.
第一次尝试:
在我的application.js档案中:
...
//= require jwplayer/jwplayer
//= require jwplayer/jwplayer.html5 # the file name is jwplayer.html5.js
...
Run Code Online (Sandbox Code Playgroud)
运行后,rake assets:clean ; rake assets:precompile我在视图中得到以下错误(在Heroku上):
An ActionView::Template::Error occurred in nodes#show:
jwplayer/jwplayer.html5.js isn't precompiled
Run Code Online (Sandbox Code Playgroud)
第二次尝试:
在我的application.js档案中:
...
//= require jwplayer/jwplayer
...
Run Code Online (Sandbox Code Playgroud)
然后,我将其添加到production.rb环境配置文件中:
# Also tried %w(jwplayer.html5.js)
config.assets.precompile += %w(jwplayer/jwplayer.html5.js)
Run Code Online (Sandbox Code Playgroud)
在清理和预编译资产并推送到Heroku之后,原始版本ActionView::Template::Error不再发生,但现在JW播放器显示以下消息:
Error loading player: HTML5 player not found
Run Code Online (Sandbox Code Playgroud)
这是HAML视图中的JW Player初始化:
:javascript
jwplayer("video_display_object_#{display_object.id}").setup({
width: "948",
height: "533",
image: "#{display_object.video_screenshot_url}",
file: "#{display_object.resource_url}",
modes: [
{ …Run Code Online (Sandbox Code Playgroud) 我试图从控制器中调用image_url(来自ActionView::Helpers::AssetUrlHelper模块).我的控制器是一个API控制器,可以呈现json响应.因此,控制器准备对象,我jBuilder用于呈现实际的JSON响应.这是代码:
class Api::Mobile::HomeController < Api::Mobile::ApplicationController
include ActionView::Helpers::AssetUrlHelper
def index
@items = [Api::Mobile::HomePageItem.new(
type: 'image',
image: image_url("api/mobile/home/tutor-with-student.jpg"))]
end
end
Run Code Online (Sandbox Code Playgroud)
该图像tutor-with-student.jpg存在于以下文件夹中:
app/assets/images/api/mobile/home/tutor-with-student.jpg
Run Code Online (Sandbox Code Playgroud)
问题是image_url返回值:
http://myhost.com/images/api/mobile/home/tutor-with-student.jpg
Run Code Online (Sandbox Code Playgroud)
代替
http://myhost.com/assets/api/mobile/home/tutor-with-student.jpg
Run Code Online (Sandbox Code Playgroud)
请注意,当我使用image_url实际视图时,该方法返回正确的值.
如何image_url在Controller层上使用该方法以使其返回正确的值?
我想在我的Rails 4应用程序中使用material-ui组件库.我目前正在使用react-rails gem将.jsx编译添加到资产管道.我在gemfile中通过rails-assets添加了material-ui,如下所示:
source 'https://rails-assets.org' do
gem 'rails-assets-material-ui'
end
Run Code Online (Sandbox Code Playgroud)
我在我的application.js文件中需要这样的库:
//= require material-ui
Run Code Online (Sandbox Code Playgroud)
但是我不断收到错误"找不到文件'材料-ui".如何使用react-rails gem在我的Rails应用程序中使用material-ui组件库?
我刚刚将我的 Dropbox 帐户从个人帐户升级为企业帐户。结果,它将我的主要保管箱名称从“Dropbox”更改为“公司名称 Dropbox”。
现在,当我尝试启动 Rails 应用程序或执行rails assets:precompile以下操作时,出现以下错误:
$ rails assets:precompile
yarn install v1.22.0
[1/4] Resolving packages...
success Already up-to-date.
? Done in 0.15s.
rails aborted!
URI::InvalidURIError: bad URI(is not URI?): file-digest:///Users/name/Company Name Dropbox/Username/appfolder/jsp/app/assets/stylesheets/trestle/_variables.scss
/.rvm/gems/ruby-2.5.1@myapp/gems/sprockets-3.7.2/lib/sprockets/uri_utils.rb:45:in `split_file_uri'
/.rvm/gems/ruby-2.5.1@myapp/gems/sprockets-3.7.2/lib/sprockets/uri_utils.rb:126:in `parse_file_digest_uri'
/.rvm/gems/ruby-2.5.1@myapp/gems/sprockets-3.7.2/lib/sprockets.rb:159:in `block in <module:Sprockets>'
/.rvm/gems/ruby-2.5.1@myapp/gems/sprockets-3.7.2/lib/sprockets/dependencies.rb:67:in `resolve_dependency'
/.rvm/gems/ruby-2.5.1@myapp/gems/sprockets-3.7.2/lib/sprockets/cached_environment.rb:23:in `block in initialize'
/.rvm/gems/ruby-2.5.1@myapp/gems/sprockets-3.7.2/lib/sprockets/cached_environment.rb:59:in `resolve_dependency'
Run Code Online (Sandbox Code Playgroud)
我已经更新到 Rails 的最新可用版本5.2.4.3。
如何在不更改项目位置的情况下解决此问题?我需要将它留在我的 Dropbox 文件夹中。
我刚刚升级到 Rails 6 并按照指南制作了这个清单文件:
//= link_tree ../fonts
//= link_tree ../images
//= link_directory ../javascripts .js
//= link_directory ../stylesheets .css
Run Code Online (Sandbox Code Playgroud)
但 Rails 抱怨我没有添加资产/images/subfolder/
我如何链接到/images它及其下的所有内容?
我一直在尝试在我的项目中借助 Tailwind 添加背景图片,但它不起作用,我猜是因为某个地方的资产管道冲突?
我尝试过的:
tailwind.config像这样
直接将图像插入我的: 'essential-oil': "url('/assets/images/essential-oil.png')",'essential-oil': "asset-url('essential-oil.png')"style: "background-image:url(/assets/images/essential-oil.png)Public所有解决方案都不起作用。最糟糕的是,我的所有样式最多都会从我的 HTML 中消失,样式看起来不错,但图片不存在。任何想法 ?
谢谢。
asset-pipeline ×10
ruby ×2
asset-sync ×1
assets ×1
ember-rails ×1
ember.js ×1
font-face ×1
heroku ×1
i18n-gem ×1
jwplayer ×1
jwplayer6 ×1
react-jsx ×1
react-rails ×1
reactjs ×1
ruby-2.5 ×1
tailwind-css ×1