Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 提供从rails应用程序编译的javascript和css文件,供外部站点使用_Ruby On Rails_Sprockets - Fatal编程技术网

Ruby on rails 提供从rails应用程序编译的javascript和css文件,供外部站点使用

Ruby on rails 提供从rails应用程序编译的javascript和css文件,供外部站点使用,ruby-on-rails,sprockets,Ruby On Rails,Sprockets,如何使rails应用程序中的某些资产文件(.js和.css)可用于其他站点 例如: // allow this to be added to some external website <link rel="stylesheet" href="https://myrailsapp.com/external/mystyle.css"> <script src="https://myrailsapp.com/external/myscript.js"></script&

如何使rails应用程序中的某些资产文件(.js和.css)可用于其他站点

例如:

// allow this to be added to some external website
<link rel="stylesheet" href="https://myrailsapp.com/external/mystyle.css">
<script src="https://myrailsapp.com/external/myscript.js"></script>
//允许将其添加到某些外部网站

js和css文件应通过标准资产管道进行编译。

对于rails 5,在
config/initializers/assets.rb中添加要预编译的所需资产

Rails.application.config.assets.precompile+=%w(外部/myscript.js外部/mystyle.css)

这将在每次部署时生成资产的预编译版本

带有摘要(推荐默认rails行为)

不过,附加摘要有一个问题。预编译的资产将被命名为

mystyle-36050fdf64ed881b967d4216084ed3072da6369f1b4dcf783ea28435f6db0091.css

您可以更改部署设置以运行rake任务,该任务将从资产的文件名中删除摘要。比如说

假设您正在使用capistrano部署应用程序。您必须将类似的内容添加到
config/deploy.rb

namespace :deploy do
  after :restart, 'your_rake_task_namespace:task_name'
end
没有摘要(更简单但会影响缓存失效)


如果您不想增加部署设置的复杂性,只需禁用资产指纹。通过在
config/application.rb
中添加
config.assets.digest=false
或针对单个环境
config/environments/production.rb

我不愿意增加删除摘要的额外复杂性。我更喜欢使用固定路径的动态创建,除非性能被证明是禁止的。我已经更新了我的答案,您可以通过将
config.assets.digest=false
添加到
config/application.rb
@de来禁用摘要。确实,唯一的区别是rails 4中没有
config/initilizers/assets.rb
,因此您必须将
config.assets.precompile+=['your-asset.js']
添加到
config/application.rb
中。您已经帮了我很多忙,我有一个关于缓存控制的逻辑后续问题:您能分享一些更多的见解吗?