为什么我的 unicode 不能在 Passenger 下工作?
这道题包含java和ruby。 我有一个从 ruby 调用的 java 程序。
这段代码在merb下完美运行,无需任何修改。
通过设置 $KCODE="UTF8",此代码将在 irb 下完美运行。
在我的一生中,我无法让它在 phusion乘客下工作——这是一个问题,因为我们的生产服务器在乘客下,但我大部分时间都花在 mongrel 或我的开发机器上的其他东西上。
设置非常简单。
这是java代码: 导入 java.io.; 导入java.util.;
public class Simple {
public static void main(String[] args) throws Exception {
System.out.println("Ç");
}
}
现在这里是 ruby 代码:
IO.popen("java -cp \"/home/me/pass\" Simple") do |f| @blah = f.read end
当在 guest/merb 下运行时,您应该能够执行 Merb.logger.error(@blah) 并获得完全相同的测试数据 - 就像我说的,这在 merb 下运行良好,在 irb 下运行良好,如果 下不起作用- 简化了一切
您设置了 KCODE,但它在乘客更新
This question contains java and ruby.
I have a java program that I make a call to from ruby.
This code works under merb perfectly without any modifications.
This code will work under irb perfectly by setting $KCODE="UTF8".
For the life of me I can not get it to work under phusion passenger -- this is a problem since our production server is under passenger but I spend most of my time with mongrel or something on my dev machine.
The setup is extremely simple.
Here is the java code:
import java.io.;
import java.util.;
public class Simple {
public static void main(String[] args) throws Exception {
System.out.println("Ç");
}
}
now here is the ruby code:
IO.popen("java -cp \"/home/me/pass\" Simple") do |f| @blah = f.read end
when ran under passenger/merb you should be able to do a Merb.logger.error(@blah) and get the EXACT same testdata -- like I said this works fine under merb and fine under irb if you set the KCODE but it does not work under passenger
UPDATE -- simplified everything
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
问题可能是java子进程启动的环境配置不正确。 一种暴力方法是使用 ENV 哈希注入环境变量。 举个例子:
您可能还必须为 Java 程序编写一个包装器,以建立正确的环境并从那里开始工作,或者可能对 Java 程序本身进行修改,强制使用 UTF8 而不是读取环境。
The issue may be that the environment into which the java sub-process is launched is not correctly configured. A brute-force approach is to inject environment variables using the ENV hash. As an example:
You may also have to write a wrapper for your Java program that establishes the correct environment and works from there, or perhaps a modification to the Java program itself that forces UTF8 instead of reading the environment.