我认为这种行为是一个错误,但我也在这里问。我已经在sprockets-rails github repo上打开了一个错误报告。
我遇到资产前缀问题。如果我配置Rails.application.config.assets.prefix = 'myprefix'
在config/initializers/assets.rb
中,然后运行:
RAILS_ENV=production rake assets:clobber
RAILS_ENV=production rake assets:precompile
使用正确的路径生成我的所有预编译资产(public/myprefix/asset_digest.png
)。从.erb文件中查找资源可以正常工作,正确生成路径并正确显示所有内容。问题是在image-url()
中生成的路径和.scss文件中的类似方法获得前缀两次。
因此,而不是public/myprefix/background_digest.jpg
Rails尝试在public/myprefix/myprefix/background_digest.jpg
处找到图像,但图像已正确预编译并保存到public/myprefix
文件夹。一种解决方法是简单地将所有资产从myprefix
复制到myprefix/myprefix
,但这是处理此问题的一种令人讨厌的方法。这仅适用于从.scss文件引用的资产。
为了确保我的配置不是问题,我尝试在新应用程序上重现它:
Ruby:2.3.0
Rails:4.2.6。
rails new prefixtext -T
cd prefixtest
rails generate scaffold post title body:string
构造
application.scss
中的一条css规则:.background {
width: 500px;
height: 500px;
background-image: image-url('my-background.jpg');
}
RAILS_ENV=production
我也尝试使用sprockets-rails版本2.3.2,同样的事情发生了。
我的机器是带有rvm的ArchLinux,伙计也试过他的机器(最后一个Ubuntu也用rvm),同样的事情发生在我的服务器上(带有rvm的CentOs 7)。 经测试的Ruby版本:2.3.0,2.1.2,2.1.5。经过测试的Rails版本:4.2.1,4.2.6
任何人都知道可能是什么情况,或者它确实是一个错误。我该如何进一步测试呢? 以下是错误报告:https://github.com/rails/sprockets-rails/issues/363
答案 0 :(得分:0)
你忘记了一件简单的事情......斜线:)
而不是
Rails.application.config.assets.prefix = 'myprefix'
在config / initializers / assets.rb
中你需要把
Rails.application.config.assets.prefix = '/myprefix'
就是这样......我完全按照你的步骤做了,并且在我的本地工作。
P.S。我刚刚在我的生产服务器上启动了一个新的应用程序,而且一切都运行良好。