【问题标题】:ColdFusion - Variable DSNNAME is undefinedColdFusion - 变量 DSNNAME 未定义
【发布时间】:2014-10-27 19:26:28
【问题描述】:

我正在维护一个客户网站 - PHP - 今天,当我从共享服务器迁移到 VPS 时...我需要从头开始配置 coldfusion .

Obs.:我一生中从未使用过 ColdFusion

但我收到此错误:变量 DSNNAME 未定义。而且我没有在哪里进行配置。

The web site you are accessing has experienced an unexpected error.
Please contact the website administrator. 

The following information is meant for the website developer for debugging purposes.
Error Occurred While Processing Request
Variable DSNNAME is undefined.


The error occurred in /home/project/public_html/projectname/integracao/register/members_body.cfm: line 303
Called from /home/project/public_html/projectname/integracao/register/frame.cfm: line 45
Called from /home/project/public_html/projectname/integracao/register/members.cfm: line 5
301 :         <td>
302 :           <div align="right">
303 :             <cfquery name="Qry_location" datasource="#dsnname#">
304 :               SELECT * FROM location      
305 :               WHERE location_active = '1' 
Resources:
Check the ColdFusion documentation to verify that you are using the correct syntax.
Search the Knowledge Base to find a solution to your problem.
Browser   Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.104 Safari/537.36
Remote Address    189.15.195.13
Referrer    http://projectname/site/index.php?option=com_content&view=article&id=53&Itemid=12
Date/Time   27-Oct-14 07:17 PM
Stack Trace
at cfmembers_body2ecfm207100474.runPage(/home/project/public_html/projectname/integracao/register/members_body.cfm:303) at cfframe2ecfm1139106636.runPage(/home/project/public_html/projectname/integracao/register/frame.cfm:45) at cfmembers2ecfm1994964255.runPage(/home/project/public_html/projectname/integracao/register/members.cfm:5) 

coldfusion.runtime.UndefinedVariableException: Variable DSNNAME is undefined.
  at coldfusion.runtime.CfJspPage._get(CfJspPage.java:388)
  at coldfusion.runtime.CfJspPage._get(CfJspPage.java:350)

我的结构是:

/home/project/public_html/projectname/application.cfm
/home/project/public_html/projectname/integracao/register/members_body.cfm

我需要该 members.cfm 文件,请阅读文件 Application.cfm。我怎样才能做到这一点?

【问题讨论】:

  • 检查 Appliaction.cfc(或 .cfm 用于旧应用程序),因为通常在那里设置常量。
  • 数据源也可以在 ColdFusion 管理员中定义。您可以使用管理员的 ColdFusion 存档部分保存旧服务器的配置(如果该服务器仍然存在),然后将这些设置导入新服务器。 Packaging applications in CAR files
  • 与您的问题无关,但是一旦您解决了此问题,我强烈建议您查看CF LockDown/Security Guides。管理员网址不应公开。
  • @PatrickMaciel application.cfc 文件是否在任何地方设置了该变量?如果是这样,是在一个函数中设置的吗?如果有,是什么功能?

标签: php apache coldfusion


【解决方案1】:

&lt;cfinclude template="/application.cfm"/&gt;

你在 *nix 上吗?如果是这样,application file names are case sensitive。您的文件名为Application.cfm 吗?注意第一个字母是大写的“A”。如果不是,那可以解释为什么它不会触发。 CF 正在寻找Application.cfm,而不是application.cfm。所以后者会被忽略。

【讨论】:

  • 非常感谢我的朋友。
  • 很高兴我能帮上忙 :) 不要忘记查看security guides。限制对 Admin url 的访问非常重要。
【解决方案2】:

就像你说的,你必须从头开始配置它。如果您以前从未与 CF 合作过,请注意几点。

  1. 要在 CF 代码中运行查询,您需要将它们与数据库连接。这是通过 CFQUERY 的数据源属性完成的。

  2. 通常,开发人员通常将 darasource 名称存储在一个持久变量中,并将其保存在 Application.cfm 或 Application.cfc 中。在您的情况下,此持久变量的名称是 DSNNAME。

  3. ColdFusion 需要与数据库建立连接。这是通过您发布的链接在 CF 管理屏幕中创建连接来完成的。

也就是说,您就是这样做的:假设您有一个 SQL Server 数据库,单击数据源并从那里添加数据源。这很容易。创建数据源后,将该数据源分配给 Application.cfm 或 Application.cfc 中的 DSNNAME 变量。

【讨论】:

  • 好的...我认为我的 CFM 文件无法读取 application.cfm。我在哪里可以找到这个配置?
  • 我刚看到你的评论,你有 Application.cfc 文件。在该文件中搜索变量名 DSNNAME
  • 由于您已经将应用程序从共享迁移到 VPS,您是否在 CF Admin 中配置了 DSN?
  • @PatrickMaciel:有application.cfmapplication.cfc 吗?
【解决方案3】:

不知何故,您的应用程序所需的 ColdFusion 配置文件没有被正确读取。它可能没有包含在您获得的 .cfm 文件中,因为这种文件通常是特定于服务器的,并且会被放在源代码管理忽略列表中。

如果文件存在,但没有被调用,您可能可以通过搜索 dsnname= dsnname = 等字符串找到它。

您粘贴到问题中的是 CF 管理员控制台,它可能无助于解决此问题。但是,您必须确保数据库已正确配置和命名,以匹配 #dsnname# 的计算结果。

最好的办法可能是联系编写代码的人,询问是否可能遗漏了配置/设置文件。

【讨论】:

    【解决方案4】:

    我解决了这个问题,包括每个页面中的application.cfm

    是的,这很疯狂,但这是唯一有效的解决方案。

    <cfinclude template="/application.cfm"/>
    

    但我想要的是每个.cfm 文件自动包含 application.cfm,作为旧的共享主机。

    【讨论】:

    • 嗯...你在 *nix 上吗?如果是这样,application file names are case sensitive。您的文件名为Application.cfm 吗?注意第一个字母是大写的“A”
    • 如果不是,这可以解释为什么它不会触发。 CF 正在寻找名为“Application.cfm”而不是“application.cfm”的文件。所以后者被忽略了。
    • @Leigh 我的文件是 application.cfm 而不是 'Application.cfm. I'll try rename to Application.cfm`...
    • @Leigh 你说得对,我的朋友!谢谢!请为我添加另一个答案。
    • 很高兴它有帮助 :) 现在发布。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    • 2011-06-11
    • 2021-02-27
    相关资源
    最近更新 更多