2

我的 app/assets 目录中有 javascripts 和 stylesheets 目录,就像任何普通的 Rails 应用程序一样。

但是,我也希望有一个插件目录。

例子:

app/assets/plugins/myPlugin1/somefile.js
app/assets/plugins/myPlugin1/somefile.css

问题是,如果我使用

<%= javascript_include_tag 'plugins/myPlugin1/somefile.js' %>

我会收到 404 错误,因为

/assets/javascripts/plugins/myPlugin1/somefile.js

不存在。然后,我注意到“插件”目录试图在 javascripts 中被访问。我认为这与“javascript_include_tag”有关。

经过一番研究,我意识到我必须将此行包含到 config/application.rb

config.assets.paths << Rails.root.join("app", "assets")

它似乎奏效了。在 WEBRick 上,在开发上,它运行良好。


现在我成功地部署到服务器,预编译了资产,并认为我已经准备好了。

目录

/public/assets/

被创建。“app/assets/javascripts”、“app/assets/stylesheets”和“app/assets/plugins”中的所有内容都被预编译为public/assets

什么有效

app/assets/javascripts/login.js

能够在一个视图中访问

<%= javascript_include_tag 'login.js' %>

什么没用

属于“插件”的文件。

app/assets/plugins/myPlugin1/somefile.js

被预编译为

public/assets/myPlugin1/somefile.js

但是当我跑

<%= javascript_include_tag 'plugins/myPlugin1/somefile.js' %>

它试图访问

/javascripts/plugins/myPlugin1/somefile.js

根据我的开发经验,正确的路径是:

/myPlugin1/somefile-(some hex hash).js

因此,如您所见,在生产中我遇到了与未添加时相同的问题

config.assets.paths << Rails.root.join("app", "assets")

到应用程序.rb

可能是什么问题呢?

4

1 回答 1

1

你可以这样:

Dir.glob("#{Rails.root}/app/assets/plugins/**/").each do |path|
  config.assets.paths << path
end

或者设置每个插件,一一设置,如:

config.assets.paths << Rails.root.join("app", "assets", "plugins", "myPlugin")

但是,如果您在该 myPlugin 目录上有子目录,则不会加载每个文件。因此,第一个选项可能更适合您。

于 2015-12-26T04:27:51.400 回答