Rails - Rails.root.join 部署后行为异常
Rails - Rails.root.join misbehaving after deployment
我的 app/assets 目录中有目录 javascripts 和样式表,就像任何普通的 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
不存在。然后,我注意到 "plugins" 目录试图在 javascript 中被访问。我认为这与 "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' %>
什么不起作用
属于 "plugins" 的文件。
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")
到application.rb
可能是什么问题?
你可以这样走:
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 目录上有子目录,则不会加载每个文件。所以第一个选项可能更适合你。
我的 app/assets 目录中有目录 javascripts 和样式表,就像任何普通的 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
不存在。然后,我注意到 "plugins" 目录试图在 javascript 中被访问。我认为这与 "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' %>
什么不起作用
属于 "plugins" 的文件。
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")
到application.rb
可能是什么问题?
你可以这样走:
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 目录上有子目录,则不会加载每个文件。所以第一个选项可能更适合你。