Sinatra NoMethodError at / undefined method `stylesheet_link_tag' for #
Sinatra NoMethodError at / undefined method `stylesheet_link_tag' for #
我目前正在用 sinatra 制作一个应用程序,我已经工作了几个小时试图在其中实现 bootstrap,并意识到在 rails.[=19 中它是多么容易=]
无论如何,当我 运行 Web 服务器并转到 / 时,我看到一个与行 <%= stylesheet_link_tag 'app', media: 'all' %>
相关的错误,我把它放在我的 app.erb 视图中(索引我的网络应用程序)。此行旨在加载 assets/stylesheets 文件夹中的 scss 文件,该文件包含 bootstrap.
的 @import 值
我正在使用 sinatra-asset-pipeline gem,并且我已经根据 github 页面上的说明正确设置了它。在过去的 4 个小时里,我一直在尝试很多事情,但没有任何效果。以下是最重要文件的代码:
assets/stylesheets/app.scss:
@import "bootstrap-sprockets";
@import "bootstrap";
views/app.erb:
<!DOCTYPE html>
<html>
<head>
<title>Salah Kayali</title>
<%= stylesheet_link_tag 'app', media: 'all' %>
<%= javascript_include_tag 'app' %>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<%= partial :header %>
</body>
</html>
app.rb:
require 'sinatra/partial'
require 'rubygems'
require 'sinatra'
# set :bind, '0.0.0.0'
require 'sinatra/asset_pipeline'
class App < Sinatra::Base
register Sinatra::Partial
configure do
set :assets_precompile, %w(app.js app.scss *.png *.jpg *.svg *.eot *.ttf *.woff)
set :assets_css_compressor, :sass
set :assets_js_compressor, :uglifier
register Sinatra::AssetPipeline
if defined?(RailsAssets)
RailsAssets.load_paths.each do |path|
settings.sprockets.append_path(path)
end
end
end
enable :partial_underscores
set :partial_template_engine, :erb
get '/' do
erb :app
end
run! if __FILE__ == [=13=]
end
config.ru:
require 'rubygems'
require 'bundler'
Bundler.require
run App
Rakefile:
require 'sinatra/asset_pipeline/task'
require './app'
Sinatra::AssetPipeline::Task.define! App
Gemfile:
source "https://rubygems.org"
ruby "2.2.3"
gem 'bundler', '~> 1.10.6'
gem 'sinatra', require: 'sinatra/base'
gem 'sinatra-asset-pipeline', require: 'sinatra/asset_pipeline'
gem 'thin', '~> 1.6.4'
gem 'sass', '~> 3.4.18'
gem 'coffee-script', '~> 2.4.1'
gem 'uglifier', '~> 2.7.2'
gem 'rack-coffee', '~> 1.0.3'
gem 'sinatra-partial'
source 'https://rails-assets.org' do
gem 'rails-assets-jquery'
gem 'rails-assets-bootstrap-sass'
end
希望有人能帮帮我,我真的不知道该怎么办。我通常习惯于 rails,其中资产管道已经存在并负责一切。不过,我强迫自己用 sinatra 制作这个 webapp,这样我才能真正理解当你 "automagically" 用 rails 创建东西时实际发生了什么。
这里是 link 我浏览器中错误输出的截图:http://puu.sh/ktUIA/1d8396b034.png
你的问题是 stylesheet_link_tag
和 javascript_include_tag
是 ActionView 的一部分,ActionView 是 Rails 的基础之一(即见 ActionView::Helpers::AssetTagHelper
)。
根据 sinatra-asset-pipeline
文档:
Now when everything is in place you can use all helpers provided by
sprockets-helpers
查看 sprocket-helpers
示例,您需要执行以下操作:
<link rel="stylesheet" href="<%= stylesheet_path 'application' %>">
<script src="<%= javascript_path 'application' %>"></script>
所以你要找的是 stylesheet_path
和 javascript_path
而不是 stylesheet_link_tag
和 javascript_include_tag
.
我目前正在用 sinatra 制作一个应用程序,我已经工作了几个小时试图在其中实现 bootstrap,并意识到在 rails.[=19 中它是多么容易=]
无论如何,当我 运行 Web 服务器并转到 / 时,我看到一个与行 <%= stylesheet_link_tag 'app', media: 'all' %>
相关的错误,我把它放在我的 app.erb 视图中(索引我的网络应用程序)。此行旨在加载 assets/stylesheets 文件夹中的 scss 文件,该文件包含 bootstrap.
我正在使用 sinatra-asset-pipeline gem,并且我已经根据 github 页面上的说明正确设置了它。在过去的 4 个小时里,我一直在尝试很多事情,但没有任何效果。以下是最重要文件的代码:
assets/stylesheets/app.scss:
@import "bootstrap-sprockets";
@import "bootstrap";
views/app.erb:
<!DOCTYPE html>
<html>
<head>
<title>Salah Kayali</title>
<%= stylesheet_link_tag 'app', media: 'all' %>
<%= javascript_include_tag 'app' %>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<%= partial :header %>
</body>
</html>
app.rb:
require 'sinatra/partial'
require 'rubygems'
require 'sinatra'
# set :bind, '0.0.0.0'
require 'sinatra/asset_pipeline'
class App < Sinatra::Base
register Sinatra::Partial
configure do
set :assets_precompile, %w(app.js app.scss *.png *.jpg *.svg *.eot *.ttf *.woff)
set :assets_css_compressor, :sass
set :assets_js_compressor, :uglifier
register Sinatra::AssetPipeline
if defined?(RailsAssets)
RailsAssets.load_paths.each do |path|
settings.sprockets.append_path(path)
end
end
end
enable :partial_underscores
set :partial_template_engine, :erb
get '/' do
erb :app
end
run! if __FILE__ == [=13=]
end
config.ru:
require 'rubygems'
require 'bundler'
Bundler.require
run App
Rakefile:
require 'sinatra/asset_pipeline/task'
require './app'
Sinatra::AssetPipeline::Task.define! App
Gemfile:
source "https://rubygems.org"
ruby "2.2.3"
gem 'bundler', '~> 1.10.6'
gem 'sinatra', require: 'sinatra/base'
gem 'sinatra-asset-pipeline', require: 'sinatra/asset_pipeline'
gem 'thin', '~> 1.6.4'
gem 'sass', '~> 3.4.18'
gem 'coffee-script', '~> 2.4.1'
gem 'uglifier', '~> 2.7.2'
gem 'rack-coffee', '~> 1.0.3'
gem 'sinatra-partial'
source 'https://rails-assets.org' do
gem 'rails-assets-jquery'
gem 'rails-assets-bootstrap-sass'
end
希望有人能帮帮我,我真的不知道该怎么办。我通常习惯于 rails,其中资产管道已经存在并负责一切。不过,我强迫自己用 sinatra 制作这个 webapp,这样我才能真正理解当你 "automagically" 用 rails 创建东西时实际发生了什么。
这里是 link 我浏览器中错误输出的截图:http://puu.sh/ktUIA/1d8396b034.png
你的问题是 stylesheet_link_tag
和 javascript_include_tag
是 ActionView 的一部分,ActionView 是 Rails 的基础之一(即见 ActionView::Helpers::AssetTagHelper
)。
根据 sinatra-asset-pipeline
文档:
Now when everything is in place you can use all helpers provided by sprockets-helpers
查看 sprocket-helpers
示例,您需要执行以下操作:
<link rel="stylesheet" href="<%= stylesheet_path 'application' %>">
<script src="<%= javascript_path 'application' %>"></script>
所以你要找的是 stylesheet_path
和 javascript_path
而不是 stylesheet_link_tag
和 javascript_include_tag
.