除了标题之外,当从ActiveRecord加载数据时,尽管我尽最大努力强制编码,但编码始终设置为ASCII-8Bit.我已经在这里输入了尽可能详细的信息,试图建立一个可以用来帮助我的好错误报告!
该项目使用以下技术:
(完整名单)
$ bundle show | ack '(record|padrino)'
* activerecord (2.3.8)
* padrino (0.9.14)
* padrino-admin (0.9.14)
* padrino-core (0.9.14)
* padrino-gen (0.9.14)
* padrino-helpers (0.9.14)
* padrino-mailer (0.9.14)
Run Code Online (Sandbox Code Playgroud)
剧集表:
mysql> DESCRIBE `episodes`;
+----------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| show_id | int(11) | YES | | NULL | |
| season_id …
Run Code Online (Sandbox Code Playgroud) 我已经和Sinatra和Padrino一起编程很长一段时间了.但是,我仍然无法为Padrino找到正确的身份验证和授权解决方案.让我解释一下我的期望和我已经尝试过的内容.
使用Sinatra,我成功地使用了sinatra-authentication gem以及role_model gem.我通常使用Mongoid ORM与MongoDB交谈.这两个宝石一起让我负责认证,保护路线,检查登录用户的角色以应用访问控制.
sinatra身份验证不适用于Padrino - 它对Sinatra非常具体.我多次尝试过.我已经使用相应的Padrino模块尝试了omniauth和warden,但出于某种原因,我无法让它们像美妙的sinatra-autentication宝石那样简单地工作.
所以 - 在我尝试实现我自己的解决方案(或将padatra身份验证移植到Padrino)之前 - 有人可以建议任何其他身份验证和授权解决方案吗?目前我不需要任何想象力 - 简单的基于数据库的身份验证将完美地工作.
我有控制器
app/controllers/posts.rb
Run Code Online (Sandbox Code Playgroud)
我如何使用管理员布局
admin/views/layouts/application.haml
Run Code Online (Sandbox Code Playgroud)
?
我正在尝试测试一个padrino控制器,它依赖于Padrino提供的current_account :: Admin :: AccessControl
为此,我需要模拟current_account.
代码是这样的:
App.controller :post do
post :create, map => '/create' do
Post.create :user => current_account
end
end
Run Code Online (Sandbox Code Playgroud)
和rspec:
describe "Post creation" do
it 'should create' do
account = Account.create :name => 'someone'
loggin_as account #to mock current_account
post '/create'
Post.first.user.should == account
end
end
Run Code Online (Sandbox Code Playgroud)
如何实现"loggin_as"或如何编写此测试?
我正在尝试通过Padrino的sendmail发送电子邮件.我做了这里指定的配置(配置和快速使用)
但是我总是在服务器日志中出现以下错误(在Heroku或localhost上):
app[web.1]: sh: Illegal option -
app[web.1]: Errno::EPIPE - Broken pipe:
Run Code Online (Sandbox Code Playgroud)
我安装了mail gem
,我正在使用Padrino 0.10.7
我正在使用这个,发送电子邮件:
post :create do
email(:from => "tony@reyes.com", :to => "john@smith.com", :subject => "Welcome!", :body=>"Body")
end
Run Code Online (Sandbox Code Playgroud)
这几乎就是我所有的......
我正在开发一个具有主应用程序和管理员应用程序的Padrino应用程序.当用户登录会话时,我只需运行以下两行来登录.
account = Account.authenticate(params[:email], params[:password])
set_current_account(account)
Run Code Online (Sandbox Code Playgroud)
在Admin中的任何控制器中使用调试器
current_account
#<Account @id=1 @name="John" @surname="Davies" @email="john.davies@gmail.com" @crypted_password="3456789" @role="admin">
Run Code Online (Sandbox Code Playgroud)
在任何型号的调试器
current_account
*** NameError Exception: undefined local variable or method `current_account' for #<Post @id=1 @question="Why is this not working?" @answer="I have no idea">
Run Code Online (Sandbox Code Playgroud)
我能够访问current_account以找出在Admin应用程序中登录的用户,但是在主应用程序中无法访问此变量.
我想要做的是我为所有模型创建一个活动源或审计跟踪,因此当在任何模型中创建/更新/销毁记录时,会在模型活动中创建一条新记录.话虽这么说,我需要访问模型中的current_account变量.
我搜索了解决方案,并提出了一个建议:
在admin/app.rb中
enable :sessions
set :session_id, "my-global-session"
Run Code Online (Sandbox Code Playgroud)
在app/app.rb中
register Padrino::Admin::AccessControl
register Padrino::Admin::Helpers
enable :sessions
set :session_id, "my-global-session"
Run Code Online (Sandbox Code Playgroud)
它对我不起作用.有没有办法在我的模型中访问current_account?
感谢您的任何指导或建议.
请遵循以下代码:
__ENCODING__
# => #<Encoding:UTF-8>
Encoding.default_internal
# => #<Encoding:UTF-8>
Encoding.default_external
# => #<Encoding:UTF-8>
Run Code Online (Sandbox Code Playgroud)
案例1:HAML抛出 Encoding::UndefinedConversionError
string = "j\xC3\xBCrgen".force_encoding('ASCII-8BIT')
string.encoding
# => #<Encoding:ASCII-8BIT>
Haml::Engine.new("#{string}").render
## => Encoding::UndefinedConversionError: "\xC3" from ASCII-8BIT to UTF-8
ERB.new("<%= string %>").result(binding)
# => "jürgen"
# => Resulting encoding is #<Encoding:UTF-8>
Erubis::Eruby.new("<%= string %>").result(binding)
# => "j\xC3\xBCrgen"
# => resulting encoding is #<Encoding:ASCII-8BIT>
Run Code Online (Sandbox Code Playgroud)
案例2:HAML不会抛出错误
string = "Ratatouille".force_encoding('ASCII-8BIT')
string.encoding
# => #<Encoding:ASCII-8BIT>
Haml::Engine.new("#{string}").render
## => "Ratatouille\n"
## => resulting encoding is #<Encoding:UTF-8>
ERB.new("<%= string %>").result(binding)
# => "Ratatouille"
# …
Run Code Online (Sandbox Code Playgroud) 我正在关注Padrino的博客教程,现在我遇到了我有两个应用程序的问题:管理员,应用程序和我不知道如何访问来自App内部管理员的经过身份验证的帐户.例如,在views/posts/show.haml里面我希望能够使用logged_in吗?帮助器,但它总是返回false,因为我怀疑必须以其他方式访问current_account变量.我错过了什么?
# admin/app.rb
module MyCompany
class Admin < Padrino::Application
use ActiveRecord::ConnectionAdapters::ConnectionManagement
register Padrino::Mailer
register Padrino::Helpers
register Padrino::Admin::AccessControl
set :admin_model, 'Account'
set :login_page, '/sessions/new'
enable :sessions
disable :store_location
access_control.roles_for :any do |role|
role.protect '/'
role.allow '/sessions'
end
access_control.roles_for :admin do |role|
role.project_module :posts, '/posts'
role.project_module :accounts, '/accounts'
end
# Custom error management
error(403) { @title = "Error 403"; render('errors/403', :layout => :error) }
error(404) { @title = "Error 404"; render('errors/404', :layout …
Run Code Online (Sandbox Code Playgroud) 我对中间人和红宝石缺乏经验,但我一直在努力让Slate工作,所以它在构建时生成一个侧面导航/标题列表而不是客户端使用javascript.我遇到的问题是让代码包含来自partials的头文件.
目录结构的一个示例:
Source
+--config.rb
+--includes
+--file.md
+--otherfile.md
+--index.html
+--layouts
+--layout.erb
Run Code Online (Sandbox Code Playgroud)
Config.rb代码段:
require 'nokogiri'
helpers do
def toc_data(page_content)
html_doc = Nokogiri::HTML::DocumentFragment.parse(page_content)
# get a flat list of headers
headers = []
html_doc.css('h1, h2, h3').each do |header|
headers.push({
id: header.attribute('id').to_s,
content: header.content,
level: header.name[1].to_i,
children: []
})
end
[3,2].each do |header_level|
header_to_nest = nil
headers = headers.reject do |header|
if header[:level] == header_level
header_to_nest[:children].push header if header_to_nest
true
else
header_to_nest = header if header[:level] == (header_level - 1)
false …
Run Code Online (Sandbox Code Playgroud) 我是ruby,sinatra和padrino的新手,所以这可能是一个愚蠢的问题,但是:
有没有办法将orm添加到现有的应用程序中?
我的问题是我用以下命令行创建了一个应用程序:
$ padrino-gen project sample_blog -a mysql -b
Run Code Online (Sandbox Code Playgroud)
(我认为选择了默认的ORM.)
然后尝试添加模型:
$ padrino-gen model post title:string body:text
<= You need an ORM adapter for run this generator. Sorry!
Run Code Online (Sandbox Code Playgroud)
如何在不重新编写整个应用程序的情况下添加orm?
它现在不是很重要,因为应用程序不包含任何内容,但我计划在后面添加测试,我想知道它是否容易.
感谢您的初学者提示.