我的应用程序通过将其传递给URL来呈现.pdf文件(例如,domain.com /letter/2.pdf)
它不会被保存在任何地方.
如何将实际pdf作为出站电子邮件中的附件.
这是我的邮件:
def campaign_email(contact,email)
subject email.subject
recipients contact.email
from 'Me <me@me.com>'
sent_on Date.today
attachment = File.read("http://localhost:3000/contact_letters/#{attachment.id}.pdf")
attachment "application/pdf" do |a|
a.body = attachment
a.filename = "Othersheet.pdf"
end
end
Run Code Online (Sandbox Code Playgroud)
这是创建/呈现PDF的控制器:
def create
@contact_letter = ContactLetter.new(params[:contact_letter])
@contact = Contact.find_by_id(@contact_letter.contact_id)
@letter = Letter.find_by_id(@contact_letter.letter_id)
if @contact_letter.save
flash[:notice] = "Successfully created contact letter."
#redirect_to contact_path(@contact_letter.contact_id)
redirect_to contact_letter_path(@contact_letter, :format => 'pdf')
else
render :action => 'new'
end
end
Run Code Online (Sandbox Code Playgroud)
注意:我硬编码localhost:3000 /如何用变量替换它,以便在dev上它是localhost:3000并且在生产时它是正确的域?有没有办法在此包含路由?)
错误:我得到了
我偶尔会遇到我的应用程序的问题,导致我猜测是未完成的事务未提交或回滚.我的应用程序下次尝试向数据库启动事务时,我首先注意到该问题.
我的问题是如何找出在事务中已执行但尚未提交的查询,受影响的表等等?基本上帮助我找出导致问题的原因.
我启用了二进制日志,但根据文档,事务只在提交时写入二进制日志.
innodb撤销日志应该写成一个包含在与binlogs相同的目录中的idbfile,它是,但我不能说我已找到任何方法解析它为此目的.
SHOW PROCESSLIST显示我的状态为SLEEP的会话
显示创新状态:
...
...
---TRANSACTION 0 10661864, ACTIVE 4401 sec, process no, 4831, OS thread id 3023358896
3 lock struct(s), heap size 320, undo log entries 40
MySQL thread id 2, query id 2419 localhost masteruser
Trx read view will not see trx with id >= 0 10661865, sees < 0 10661865
...
...
Run Code Online (Sandbox Code Playgroud)
PS我在ServerFault上有同样的问题,但我想这个问题介于两者之间,当涉及到分类时,+我发现该网站的活动比StackOverflow低得多,所以获得答案的机会在这里感觉更高,希望这个好.
/的Kristofer
我需要保证同一个线程在任意时间执行各种操作.首先,线程需要初始化一个库,然后我希望线程休眠直到需要完成工作,并且在用户输入时,我需要能够传递选择器或块来执行.
如何在初始化后设置NSRunLoop进入睡眠状态?之后,如何通知运行循环唤醒并执行某些操作?
我已经尝试过阅读iOS的线程编程指南,但是我想避免将类设置为自定义输入类并使用更轻量级的东西 performSelector:onThread:
我可以设置一个计时器从现在开始永远开火,所以运行循环不会结束吗?
这基本上是我想要的伪代码:
// Initialization Code...
do {
sleepUntilSignaled();
doWorkSentToThisThread();
while (!done);
Run Code Online (Sandbox Code Playgroud)
我把工作发送到哪里作为performSelector:onThread:消息.如果我可以将运行循环发送到像下面这样的块会更好:^{[someObj message]; [otherObj otherMsg];}但是我很高兴,performSelector因为我很确定没有太多额外的编码就可以实现.
谢谢!
我有几个输入字段的活动.当活动开始时,显示软键盘.当按下后退按钮软键盘关闭并关闭活动时,我需要再次按下后退按钮.
所以问题是:是否有可能拦截后退按钮关闭软键盘并在一次按下后退按钮完成活动而不创建自定义InputMethodService?
PS我知道如何在其他情况下拦截后退按钮:onKeyDown()或者onBackPressed()在这种情况下它不起作用:只有第二次按下后退按钮被拦截.
如何在Python中执行以下操作?
array = [0, 10, 20, 40]
for (i = array.length() - 1; i >= 0; i--)
Run Code Online (Sandbox Code Playgroud)
我需要有一个数组的元素,但从最后到开头.
使用Cocos2d for iPhone实现可扩展的可缩放游戏地图的最佳方法是什么.它会像Mobile Safari一样,但游戏地图不完全适合屏幕.或者喜欢它如何用愤怒的小鸟,剪绳等.
这不是一个侧滚动游戏,只是一个可以放大/缩小的固定游戏区域.
我是新手,如果有这方面的教程会很棒.
谢谢
我有一个FormWizard,我需要第一个表单中的数据传递给第二个表单的构造函数,以便我可以构建一个动态表单.
我可以通过FormWizard的process_step获取第一个表单的数据.
我使用字段列表的数据库调用创建第二个窗体的字段.
class ConditionWizardDynamicQuestions(forms.Form):
def __init__(self, DynamicQuestions=None, *args, **kwargs):
super(ConditionWizardDynamicQuestions, self).__init__(*args, **kwargs)
questions = Question.objects.filter(MYDATA = DATA_FROM_1STFORM)
for q in questions:
dynField = FieldFactory(q)
self.fields[q.label] = dynField
Run Code Online (Sandbox Code Playgroud)
如何通过DATA_FROM_1STFORM?
我的结果代码:我放弃了表单的init,并将其切换到CreateQuestions def.然后使用向导的get_form覆盖来在创建后更改表单.
class ConditionWizard(SessionFormWizard):
def get_form(self, request, storage, step=None, data=None, files=None):
form = super(ConditionWizard, self).get_form(request, storage, step, data, files)
stepIndex = self.get_step_index(request, storage, step)
if stepIndex == 1:
form.CreateQuestions(request.session["WizardConditionId"])
if stepIndex == 3:
form.fields['hiddenConditionId'].initial = request.session["WizardConditionId"]
form.fields['medicationName'].queryset = Medication.objects.filter(condition = request.session["WizardConditionId"])
return form
Run Code Online (Sandbox Code Playgroud) 这个问题的灵感来自另一个问题.
如果多个线程在一个synchronized块上等待,并且锁定可用,谁先行?它是由线程优先级(然后先来先服务)?
并且适用相同的规则notify(使用多个wait线程)?
是否可以创建一个工厂或代理来决定线程是在(Web)请求还是后台进程(即调度程序)中运行,然后根据该信息创建会话bean或原型bean?
示例(伪Spring配置:)
<bean id="userInfoSession" scope="session" />
<bean id="userInfoStatic" scope="prototype" />
<bean id="currentUserInfoFactory" />
<bean id="someService" class="...">
<property name="userInfo" ref="currentUserInfoFactory.getCurrentUserInfo()" />
</bean>
Run Code Online (Sandbox Code Playgroud)
我希望这会让我的问题更容易理解......
我的解决方案
更新自己的问题永远不会迟到;).我用两个不同的客户端会话实例,一个SessionScoped客户端会话和一个SingletonScoped会话解决了它.两者都是正常豆类.
<bean id="sessionScopedClientSession" class="com.company.product.session.SessionScopedClientSession" scope="session">
<aop:scoped-proxy />
</bean>
<bean id="singletonScopedClientSession" class="com.company.product.session.SingletonScopedClientSession" />
<bean id="clientSession" class="com.company.product.session.ClientSession">
<property name="sessionScopedClientSessionBeanName" value="sessionScopedClientSession" />
<property name="singletonScopedClientSessionBeanName" value="singletonScopedClientSession" />
</bean>
Run Code Online (Sandbox Code Playgroud)
然后ClientSession将决定单例或会话范围:
private IClientSession getSessionAwareClientData() {
String beanName = (isInSessionContext() ? sessionScopedClientSessionBeanName : singletonScopedClientSessionBeanName);
return (IClientSession) ApplicationContextProvider.getApplicationContext().getBean(beanName);
}
Run Code Online (Sandbox Code Playgroud)
可以通过以下方式收集会话类型:
private boolean isInSessionContext() {
return RequestContextHolder.getRequestAttributes() != null;
}
Run Code Online (Sandbox Code Playgroud)
所有类都实现了一个名为IClientSession的接口.singletonScoped和sessionScoped bean都从找到实现的BaseClientSession扩展.
然后,每个服务都可以使用客户端会话,即:
@Resource
private ClientSession …Run Code Online (Sandbox Code Playgroud) 由于重复是微不足道的,因此无法识别用户或请求unique.
但是,有一些方法可以阻碍作弊尝试并为用户提供准独特的状态.
我知道以下内容:
是否有更多方法可以跟踪未授权(非登录,非身份验证)的网站访问者?